一 synchronized修饰函数时,同一对象中的带有synchronized的函数不能同时运行
二 synchronized修饰代码块时,锁的是 用同一个对象做为锁的代码块 这些代码块不能同时运行
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main2 {
public static void main(String[] args) {
Object Lock = new Object();
C c1 = new C(Lock);
C c2 = new C(Lock);
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new A(c1));
exec.execute(new B(c2));
}
}
class A implements Runnable {
C c;
public A(C c) {
this.c = c;
}
@Override
public void run() {
c.showA();
//c.showB();
}
}
class B implements Runnable {
C c;
public B(C c) {
this.c = c;
}
@Override
public void run() {
c.showB();
//c.showA();
}
}
class C {
Object Lock;
public C(Object Lock) {
this.Lock = Lock;
}
public /*synchronized*/ void showA() {
//synchronized (Lock 或 this) {
while (true) {
System.out.println("AAA");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//}
}
public /*synchronized*/ void showB() {
//synchronized (Lock 或 this) {
while (true) {
System.out.println(" BBB");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//}
}
}