- Object o 为锁
public class Test {
public static void main(String[] args) {
Object o = new Object();
new Thread(() -> {
synchronized(o){
for (int i=0;i<5;i++) {
System.out.println("A");
try {
o.wait();
} catch (Exception e) {
e.printStackTrace();
}
o.notify();
}
}
}).start();
new Thread(() -> {
synchronized(o){
for (int i=0;i<5;i++) {
System.out.println("B");
o.notify();
try {
o.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
}
- 建立一个资源类,锁对象。利用一个boolean控制打印哪个字母
public class Test {
public static void main(String[] args) {
MyPrinter myPrinter = new MyPrinter();
new Thread(() -> {
for(int i=0;i<5;i++){
myPrinter.printA();
}
}).start();
new Thread(() -> {
for(int i=0;i<5;i++){
myPrinter.printB();
}
}).start();
}
}
class MyPrinter{
boolean nowA = true;
public synchronized void printA() {
while (!nowA){
try {
this.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("A");
nowA = false;
this.notify();
}
public synchronized void printB() {
while (nowA){
try {
this.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("B");
nowA = true;
this.notify();
}
}
A
B
A
B
A
B
A
B
A
B