Java中通过wait()和notify()方法实现多线程交替打印.
class Thread05 {
/**
* true==已经输入,未输出,false==未输入,已经输出
* 默认false
*/
private boolean flag = false;
// 锁对象
private String lock = "lock";
/**
* 输入线程
*
* @title: input
* @author Administrator
* @date 2021年12月2日 下午3:40:11
*/
class InputTest extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
//在死循环条件下
while (true) {
synchronized (lock) {
if (flag == true) {
try {
//阻塞输入线程,输出线程执行
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("输入线程input");
//设置标志位
flag=true;
//唤醒阻塞的输出线程
lock.notify();
}
}
}
}
/**
* 输出线程
*
* @title: output
* @author Administrator
* @date 2021年12月2日 下午3:40:19
*/
class OutputTest extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
//在死循环条件下
while (true) {
synchronized (lock) {
//当flag=false时,表示输入线程正在工作.
if (flag == false) {
try {
//阻塞输出线程,输入线程执行
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("输出线程output");
//设置标志位
flag=false;
//唤醒阻塞的输入线程
lock.notify();
}
}
}
}
public void print() {
InputTest input=new InputTest();
OutputTest output=new OutputTest();
input.start();
output.start();
}
public static void main(String[] args) {
//执行打印
new Thread05().print();
}
}