class TestLock
import java.util.Random;
/**
* 模拟线程的等待和通知
* 不建议在线程中使用 sleep
* @author NSG
*
*/
public class TestLock {
public static void main(String[] args) {
TestLock tl = new TestLock();
tl.start();
}
// 定义锁
Object lock = new Object();
// 全局变量
int count;
private void start() {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("主程序");
Thread th = new Thread(new Runnable() {
@Override
public void run() {
synchronized(lock) {
System.out.println("子线程");
Random r = new Random();
int min = r.nextInt(6) + 1;
try {
Thread.sleep(min);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep: " + min);
//锁的通知
lock.notify();
count = 13;
}
}
});
//启动线程
th.start();
synchronized (lock) {
try {
//锁的等待
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
int back = 10 + count;
System.out.println(back);
}
}
}
TIP: 线程的启动要在锁外