实例:多线程交替输出奇数和偶数
/**
* @author MNH
* @version 1.0
* @project Name: 数据结构
* @file Name: TestOddEven
* @desc 功能描述
* @by IDE: IntelliJ IDEA
*/
public class TestOddEven {
public static void main(String[] args) {
PrintOddEven oddEven=new PrintOddEven();
PrintOdd odd=new PrintOdd(oddEven);
Thread thread1=new Thread(odd);
thread1.start();
PrintEven even=new PrintEven(oddEven);
Thread thread2=new Thread(even);
thread2.start();
}
}
class PrintOddEven{
public boolean isOdd=true;
public boolean isEven=false;
private int odd=1;
private int even=2;
public synchronized void printOdd(){
if(isOdd){
System.out.println("奇数:"+odd);
odd+=2;
isOdd=false;
isEven=true;
notify();
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
public synchronized void printEven(){
if(isEven){
System.out.println("偶数:"+even);
even+=2;
isOdd=true;
isEven=false;
notify();
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class PrintOdd implements Runnable{
private int i=0;
public PrintOddEven oddEven;
public PrintOdd(PrintOddEven oddEven){
this.oddEven=oddEven;
}
public void run(){
for (;i<50;i++){
oddEven.printOdd();
}
}
}
class PrintEven implements Runnable{
private int i=0;
public PrintOddEven oddEven;
public PrintEven(PrintOddEven oddEven){
this.oddEven=oddEven;
}
public void run(){
for (;i<50;i++){
oddEven.printEven();
}
}
}
创建两个线程。输出1~100,一个负责输出偶数,一个负责输出偶数。