package y2018.m09.d26;
/**
* synchronized必须给定一个在其上进行同步的对象。
* 一般是synchronized(this):如果获得了synchronized块上的锁,那么该对象的synchronized方法和临界区就不能被调用
* synchronized方法的意思是和synchronized(this)是一样的,在该对象上进行同步。
* synchronized(syncObject):如果这样操作就必须保证所有相关的任务都是在同一个对象上同步的。
*/
public class DualSynch {
private Object syncObject = new Object();
public synchronized void f() {
for (int i = 0; i < 100; i++) {
System.out.println("f()");
Thread.yield();
}
}
public void g() {
synchronized (syncObject) {
for (int i = 0; i < 100; i++) {
System.out.println("g()");
Thread.yield();
}
}
}
}
class syncObject {
public static void main(String[] args) {
final DualSynch ds = new DualSynch();
new Thread(){
@Override
public void run() {
ds.g();
}
}.start();
ds.f();
}
}
并发:在其他对象上同步
最新推荐文章于 2022-10-29 20:38:17 发布