- 交替打印 A ,B synchronized
技能点: wait 会释放锁
public class Print implements Runnable{
private Object lock;
private String name;
public Print(String name,Object lock) {
this.name = name;
this.lock = lock;
}
@Override
public void run() {
int i = 10;
while(i>0){
synchronized (lock) {
lock.notify();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name);
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
i--;
}
}
- 交替打印A,B ,Lock 实现
注意点 : 用的Lock 和 Condition 得是同一个
package com.zbf.IoT;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
public class PrintByLock implements Runnable{
private Lock lock;
private Condition conditionA;
private String name;
public PrintByLock(String name , Lock lock, Condition condition) {
this.lock = lock;
this.name = name;
this.conditionA = condition;
}
@Override
public void run() {
while(true){
try {
lock.lock();
conditionA.signal();
System.out.println(name);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conditionA.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}