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();
}
该Java程序展示了如何使用wait/notify机制实现线程间的协调。Thread03找到77和88后分别唤醒Thread01和Thread02,前者打印1-100的奇数,后者打印偶数。
8226

被折叠的 条评论
为什么被折叠?



