同步控制 EvenGenerator
来源:互联网 发布:随身带着淘宝去异界 编辑:程序博客网 时间:2024/06/01 09:06
通过在 EvenGenerator.java 中加入 synchronized关键字,我们就可以防止不希望
的线程访问:
//: c13:SynchronizedEvenGenerator.java
// Using "synchronized" toprevent thread collisions
public
class SynchronizedEvenGenerator implements
Invariant {
private int i;
public synchronized void next() { i++; i++; }
public synchronized int getValue() { return i; }
// Not synchronized so it can run at
// any time and thus be a genuine test:
public InvariantState invariant() {
intval = getValue();
if(val% 2 == 0)
return new InvariantOK();
else
return new InvariantFailure(newInteger(val));
}
public static void main(String[] args) {
SynchronizedEvenGenerator gen =
newSynchronizedEvenGenerator();
new InvariantWatcher(gen, 4000); // 4-second
timeout
while(true)
gen.next();
}
} ///:~
你可以注意到next( )和getValue( )都使用了synchronized进行修饰。要是你只同
步控制其中一个方法的话,那么另一个就可以随意地忽略对象锁,从而出现不负责任的调
用。关键是:每个访问关键共享资源的方法必须全部是synchronized的,否则就会出错。
另一方面,InvariantState没有同步控制,因为它只是进行测试,我们希望它在任意时
刻都能被调用,这样它才能真正检查对象的状态。
- 同步控制 EvenGenerator
- 数据同步控制
- 控制java多线程同步
- 线程的同步控制
- 线程的同步控制
- 线程同步控制
- ruby线程同步控制
- 数据流同步控制策略
- 线程间同步控制
- 多线程的同步控制
- concurrent-2-同步控制
- java同步控制
- Linux中同步控制
- 线程间的同步控制
- 控制两个CListView同步滚动
- ruby线程控制,线程同步
- 全局变量不能控制进程同步
- Win32多线程之同步控制
- 使用XML自定义控件(Custom Control Designed by XML)
- x86 cpu 寄存器 初始值
- 尝试写个爬虫(4)
- mysql5.5主从配置
- 结构体前向申明的小细节
- 同步控制 EvenGenerator
- android车机
- 函数指针与指针函数
- 用两个栈实现一个队列
- SVN 文档
- 井场数据采集系统的架构演化
- 如何在窗体之间通讯的几种方法 ? VB.NET方案 .
- Unity界面插件NGUI核心组件介绍
- jsp中上传图片(使用ajaxfileupload)