归档之于 ‘ 2014 年11 月

Java Reflection(五):方法

原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)
内容索引
获取Method对象
方法参数以及返回类型
通过Method对象调用方法

使用Java反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,通过使用java.lang.reflect.Method类就可以实现上述功能。在本节会带你深入了解Method对象的信息。

阅读全文

《GO并发编程实战》—— WaitGroup

声明:本文是《Go并发编程实战》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。
我们在第6章多次提到过sync.WaitGroup类型和它的方法。sync.WaitGroup类型的值也是开箱即用的。例如,在声明

[code lang=”java”]
var wg sync.WaitGroup
[/code]

之后,我们就可以直接正常使用wg变量了。该类型有三个指针方法,即Add、Done和Wait。
类型sync.WaitGroup是一个结构体类型。在它之中有一个代表计数的字段。当一个sync.WaitGroup类型的变量被声明之后,其值中的那个计数值将会是0。我们可以通过该值的Add方法增大或减少其中的计数值。例如:

阅读全文

Java IO: RandomAccessFile

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分。FileInputStream和FileOutputStream没有这样的功能。

创建一个RandomAccessFile

在使用RandomAccessFile之前,必须初始化它。这是例子:

[code lang=”java”]
RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");
[/code]

阅读全文

Java 集合教程

作者:Jakob Jenkov。 原文地址 译者:David.zhang   译文地址  校对:方腾飞

这些Java集合API 以一组类和接口提供给开发者,这样做容易处理object集合,除了它们的size能动态改变之外,感觉collection的工作原理有点像Array,并且它们拥有比Array更多的该机特性

相比于你自己去写一个集合类,不如用Java提供这些立即可以使用的集合类,这个教程将关注于Java集合,并且Java6中有很多特殊的Java集合。

阅读全文

《GO并发编程实战》—— 只会执行一次

声明:本文是《Go并发编程实战》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

现在,让我们再次聚焦到sync代码包。除了我们介绍过的互斥锁、读写锁和条件变量,该代码包还为我们提供了几个非常有用的API。其中一个比较有特色的就是结构体类型sync.Once和它的Do方法。

与代表锁的结构体类型sync.Mutex和sync.RWMutex一样,sync.Once也是开箱即用的。换句话说,我们仅需对它进行简单的声明即可使用,就像这样:

[code lang=”java”]
var once sync.Once

once.Do(func() { fmt.Println("Once!") })
[/code]

阅读全文

Java IO: FileOutputStream

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

FileOutputStream可以往文件里写入字节流,它是OutputStream的子类,所以你可以像使用OutputStream那样使用FileOutputStream。

这是一个FileOutputStream的例子:

阅读全文

《GO并发编程实战》—— 原子操作

声明:本文是《Go并发编程实战》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

我们已经知道,原子操作即是进行过程中不能被中断的操作。也就是说,针对某个值的原子操作在被进行的过程当中,CPU绝不会再去进行其它的针对该值的操作。无论这些其它的操作是否为原子操作都会是这样。为了实现这样的严谨性,原子操作仅会由一个独立的CPU指令代表和完成。只有这样才能够在并发环境下保证原子操作的绝对安全。
Go语言提供的原子操作都是非侵入式的。它们由标准库代码包sync/atomic中的众多函数代表。我们可以通过调用这些函数对几种简单的类型的值进行原子操作。这些类型包括int32、int64、uint32、uint64、uintptr和unsafe.Pointer类型,共6个。这些函数提供的原子操作共有5种,即:增或减、比较并交换、载入、存储和交换。它们分别提供了不同的功能,且适用的场景也有所区别。下面,我们就根据这些种类对Go语言提供的原子操作进行逐一的讲解。

阅读全文

Java Reflection(四):变量

原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)

内容索引
获取Field对象
变量名称
变量类型
获取或设置(get/set)变量值

使用Java反射机制你可以运行期检查一个类的变量信息(成员变量)或者获取或者设置变量的值。通过使用java.lang.reflect.Field类就可以实现上述功能。在本节会带你深入了解Field对象的信息。

阅读全文

《Java特种兵》5.2 线程安全

本文是《Java特种兵》的样章,感谢博文视点和作者授权本站发布

接下来的内容都将基于多核处理器,因为单核处理器不会出现将要谈到的可见性问题,不过并不代表单核CPU上多个线程就没有一致性问题,因为CPU有时间片原则,还会有其他的一些问题,例如重排序。

阅读全文

Java IO: OutputStream

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

OutputStream类是Java IO API中所有输出流的基类。子类包括BufferedOutputStream,FileOutputStream等等。参考Java IO概述这一小节底部的表格,可以浏览完整的子类的列表。

阅读全文

Java IO: FileInputStream

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

FileInputStream可以以字节流的形式读取文件内容。FileInputStream是InputStream的子类,这意味着你可以把FileInputStream当做InputStream使用(FileInputStream与InputStream的行为类似)。

阅读全文

监视器–JAVA同步基本概念

原文链接  作者:  译者:candy

大学有一门课程叫操作系统,学习过的同学应该都记得,监视器是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中,这篇文章用一种类推的思想解释监视器”monitor”。

阅读全文

Java 网络教程: ServerSocket

原文链接 作者:Jakob Jenkov 译者:homesick

用java.net.ServerSocket实现java服务通过TCP/IP监听客户端连接,你也可以用Java NIO 来代替java网络标准API,这时候需要用到 ServerSocketChannel。

创建一个 ServerSocket连接

以下是一个创建ServerSocket类来监听9000端口的一个简单的代码

ServerSocket serverSocket = new ServerSocket(9000);

阅读全文

Java IO: 字节和字符数组

原文链接  作者: Jakob Jenkov   译者:homesick

内容列表

  • 从InputStream或者Reader中读入数组
  • 从OutputStream或者Writer中写数组

在java中常用字节和字符数组在应用中临时存储数据。而这些数组又是通常的数据读取来源或者写入目的地。如果你需要在程序运行时需要大量读取文件里的内容,那么你也可以把一个文件加载到数组中。当然你可以通过直接指定索引来读取这些数组。但如果设计成为从InputStream或者Reader,而不是从数组中读取某些数据的话,你会用什么组件呢?

阅读全文

《GO并发编程实战》—— 条件变量

QQ20141107-1声明:本文是《Go并发编程实战》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

我们在第6章讲多线程编程的时候详细说明过条件变量的概念、原理和适用场景。因此,我们在本小节仅对sync代码包中与条件变量相关的API进行简单的介绍,并使用它们来改造我们之前实现的*myDataFile类型的相关方法。

在Go语言中,sync.Cond类型代表了条件变量。与互斥锁和读写锁不同,简单的声明无法创建出一个可用的条件变量。为了得到这样一个条件变量,我们需要用到sync.NewCond函数。该函数的声明如下:

[code lang=”java”]
func NewCond(l Locker) *Cond
[/code]

阅读全文

return top