package pers.zzc.exercise.test;
/**多线程奇数偶数的轮流执行*/
public class TwoThreadTest {//启动线程
public static void main(String[] args) {
Exchange exchange = new Exchange();
new Thread(new OddThread(exchange)).start();//奇数线程
new Thread(new EvenThread(exchange)).start();//偶数线程
}
}
//建一个类(含两个方法),用以分别存放两个线程要实现的功能代码,即轮流执行。
//然后在其他类重写的run()方法中调用该类的方法
class Exchange {
public synchronized void odd() {
for(int i = 1; i < 100; i++) {
if ((i%2)==0) {
try {
this.wait();//奇数线程放置在等待池,打印偶数
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("打印奇数:" + i);
this.notifyAll();
}
}
}
public synchronized void even() {
for(int i = 1; i <= 100; i++) {
if ((i%2)!=0) {
try {
this.wait();//偶数线程放置在等待池,打印奇数
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("打印偶数:" + i);
this.notifyAll();
}
}
}
}
class OddThread implements Runnable {//奇数线程要执行的功能
private Exchange exchange;//声明一个Exchange类类型的变量,用于调用Exchange类的方法
public OddThread(Exchange exchange) {
this.exchange = exchange;
}
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exchange.odd();//打印奇数
}
}
class EvenThread implements Runnable {//偶数线程要执行的功能
private Exchange exchange;
public EvenThread(Exchange exchange) {
this.exchange = exchange;
}
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exchange.even();//打印偶数
}
}
实现效果图: