"#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之前切换到其它线程执
行执行完毕。