wait notify正确使用方式
假设:当线程(Thread03)在1-100中找出77并输出后,(Thread01)输出所有1-100中的奇数,当线程(Thread03)在1-100中找出88并输出后,(Thread02)输出所有1-100中的偶数。
public class TT {
//锁
public static final Object lock = new Object();
//标记
public static boolean jishu = false;//true时开始输出奇数
public static boolean oushu = false;//true时开始输出偶数
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
synchronized (lock){
while (!jishu){
lock.wait();
}
//输出奇数
for (int i=1;i<=100;i++){
if (i%2==1){
System.out.println("Thread01-奇数输出中:"+i);
}
}
}
}
},"Thread01").start();
new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
synchronized (lock){
while (!oushu){
lock.wait();
}
//输出偶数
for (int i=1;i<=100;i++){
if (i%2==0){
System.out.println("Thread02-偶数输出中:"+i);
}
}
}
}
},"Thread02").start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock){
for (int i=1;i<=100;i++){
if (i==77){
System.out.println("Thread03-找到了:"+i);
jishu=true;
lock.notifyAll();
}
if (i==88){
System.out.println("Thread03-找到了:"+i);
oushu=true;
lock.notifyAll();
}
}
}
}
},"Thread03").start();
}
}
模板
synchronized(lock) {
while(条件不成立) {
lock.wait();
}
// 干活
}
//另一个线程
synchronized(lock) {
lock.notifyAll();
}
版权声明:本文为baiqi123456原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。