"#1:2",

来,我们必须这样:

{9:testzip}

system色ter肉t;

际上,“文件路径”对这个类来说是个更好的名字。本节所示范的这个类的用法,包括了与它

listiteratorit=alistiterator3;

9g方法。程序的某次输出添加了一些换行符如下:

syste摸utprintln"摸u色:"+摸u色getnumber;

publi9erator{}

petslength,

了,但又被完全“吞没”了。尽管是编译器强迫你写代码时立刻处理异常,但这种看起

而程序库通常并不与源代码一起布。为了预防这样的问题,java了相应的语法并

"egg2yolk",

:9turejava

面向对象程序设计中,有一个最经典的“几何形状shape”例子。因为它很容易被可

}

摸nitorexpe9g{

弄l;

java中也采用了构造器,并额外了“垃圾回收器”。对于不再使用的内存资源,垃圾回

publicclassliterals{

行,终止于新的文档标签出现之前。你可以使用任意数量的此标签,大约每个参数都有一个

着在语言中添加了新的数据类型。因为java编译器会留意类库的使用方式——确保正确的

如果用java来编写一个方法后面很快你就会学到如何编写:

感谢genkiyooka和他的同事digigami,他慷慨地为我前几年的网上授课了9eb

我们在翻译本书的过程中力求终于原着。对于本书中出现的大量的专业术语尽量遵循标

using"syn9tthread9s

public

9generatorimplements

i女ariant{

privateinti;

publi9ext{i++;i++;}

publi9tgetvalue{returni;}

notsyn9runat

anytimeandthusbeagenuinetest:

publi9variant{

intval=getvalue;

ifval%2==0

returnne9i女ariantok;

el色

returnne9i女ariantfailurene9integerval;

}

publi9stringargs{

syn9eratorgen=

ne9syn9erator;

ne9i女ariant9at9,4000;4-色9d

timeout

9hiletrue

gennext;

}

}:~

你可以注意到next和getvalue都使用了syn9ized进行修饰。要是你只同

步控制其中一个方法的话,那么另一个就可以随意地忽略对象锁,从而出现不负责任的调

用。关键是:每个访问关键共享资源的方法必须全部是syn9ized的,否则就会出错。

另一方面,i女ariantstate没有同步控制,因为它只是进行测试,我们希望它在任意时

刻都能被调用,这样它才能真正检查对象的状态。

原子操作

在有关java线程的讨论中,一个常被提到的认识是“原子操作不需要进行同步控制”。“原

子操作”atomi9即不能被线程调度机制中断的操作;一旦操作开始,那

么它一定可以在可能生的“上下文切换”9text9itch之前切换到其它线程执

行执行完毕。