(35)21.3.6 在其它对象上同步---Java编程思想之并发笔记
来源:互联网 发布:用itunes安装软件 编辑:程序博客网 时间:2024/04/30 12:37
1. synchronized块必须给定一个在其上进行同步的对象,并且最合理的方式是,使用其方法正在调用的当前对象:synchronized(this),在这种方式中,如果获得了synchronized块上的锁,那么该对象其他的synchronized方法和临界区就不能被调用了。因此如果在this上同步,临界区的效果就会直接缩小在同步的范围内。
2.在另一个对象上同步。
有时候必须在另一个对象上同步,这样做必须确保所有相关的任务都是在同一个对象上同步的。
下面例子展示了两个任务同时进入同一个对象,只要这个对象上的方法是不同的锁。
3.例1:
package jiangning.c21;
class DualSync{
private Object syObject = new SyncObject();
public synchronized void f(){//同步对象是DualSync,所以会有一个锁
for(int i=0; i<5; i++){
System. out.println("f()" );
Thread. yield();
}
}
public void g(){
synchronized (syObject ) {//同步对象syObject,使用的是另一个锁。
for(int i=0; i<5; i++){
System. out.println("g()" );
Thread. yield();
}
}
}
}
public class SyncObject {
public static void main(String[] args) {//创建的main线程用来调用g()
final DualSync ds = new DualSync();
new Thread(){//创建的Thread线程调用f()
public void run(){
ds.f();
}
}.start();
ds.g();
}
}
/**
g()
f()
f()
f()
f()
f()
g()
g()
g()
g()
*/
分析:因为锁的不同,所以两个方法可以同时进行,不会出现阻塞的现象。
- (35)21.3.6 在其它对象上同步---Java编程思想之并发笔记
- (36)21.3.6 并发 练习 15---Java编程思想之并发笔记
- (37)21.3.6 并发 练习 16---Java编程思想之并发笔记
- java编程思想笔记-并发之死锁
- java编程思想笔记-并发之CountDownLatch
- java编程思想笔记-并发之CyclicBarrier
- (42)21.4.2 在阻塞时终结---Java编程思想之并发笔记
- java编程思想笔记-并发之并发锁(一)
- (27)21.3.1 不正确的访问资源---Java编程思想之并发笔记
- (28)21.3.2 解决共享资源竞争---Java编程思想之并发笔记
- (29)21.3.3 原子性与易变性---Java编程思想之并发笔记
- (32)21.3.4 原子类---Java编程思想之并发笔记
- (34)21.3.5 临界区---Java编程思想之并发笔记
- (38)21.3.8 线程本地存储---Java编程思想之并发笔记
- 并发(java编程思想)笔记
- JAVA编程思想笔记--并发
- (41)21.4.1 并发 练习 17---Java编程思想之并发笔记
- (44)21.4.3 并发 练习 18---Java编程思想之并发笔记
- (33)21.3.3 并发 练习 14
- TTCN-3是个什么东东及其它
- (34)21.3.5 临界区---Java编程思想之并发笔记
- html-iframe 经典
- 别把自己变成了“二等公民”
- (35)21.3.6 在其它对象上同步---Java编程思想之并发笔记
- 好贴要转--bad magic number
- (36)21.3.6 并发 练习 15---Java编程思想之并发笔记
- cocos2d-单例--导演
- 凸包求法
- (37)21.3.6 并发 练习 16---Java编程思想之并发笔记
- 驴友外出安全注意事项
- 取.dll文件里的函数的地址;
- 我对应聘者的面试原则