偶数"/>
用Java实现多线程打印奇偶数
用Java实现多线程打印奇偶数
- 1. wait()和 notify() 方法的作用:
- 2. Java实现
- (1)Thread1.class 奇数线程
- (2)Thread2.class 偶数线程
- (3)共享资源类
- (4)测试
1. wait()和 notify() 方法的作用:
wait():
①让正在当前线程(o对象上活动的线程)进入等待状态(Monitor中的waitSet)直到调用o.notify方法被唤醒为止。
②释放所占有的的对象锁
notify()
:
对象o.notify可以 唤醒 正在o对象上等待的线程。只是通知,不会释放对象锁;
2. Java实现
(1)Thread1.class 奇数线程
先判断当前num是否为奇数,如果是则不需要再打印奇数了;
如果是偶数,则num+1,再打印奇数;
class Thread1 implements Runnable{ //打印奇数private Num num;public Thread1(Num num) {this.num = num;}@Overridepublic void run() {while(true){synchronized (num){if(num.number%2!=0){ //目前是奇数,不需要打印try {num.wait();} catch (InterruptedException e) {e.printStackTrace();}}// 不是奇数则+1打印奇数;System.out.println(Thread.currentThread().getName()+(++num.number));num.notify();}}}
}
(2)Thread2.class 偶数线程
先判断当前num是否为偶数,如果是则不需要再打印偶数了;
如果是奇数,则num+1,再打印即为偶数;
class Thread2 implements Runnable{//打印偶数private Num num;public Thread2(Num num) {this.num = num;}@Overridepublic void run() {while(true){synchronized (num){if(num.number%2==0){ //目前是偶数,不需要打印偶数try {num.wait();} catch (InterruptedException e) {e.printStackTrace();}}// 不是偶数则+1打印偶数;System.out.println(Thread.currentThread().getName()+(++num.number));num.notify();}}}
}
(3)共享资源类
由于synchronized()参数是共享对象不能是基本数据类型,所以创造一个Num类作为共享资源传入;
class Num{int number=1;
}
(4)测试
建立共享资源对象;
创造两个线程对象,传入共享资源;
class test {public static void main(String[] args) {Num num=new Num();Thread t1=new Thread(new Thread1(num));Thread t2=new Thread(new Thread2(num));t1.setName("奇数线程:");t2.setName("偶数线程:");t1.start();t2.start();}
}
效果:奇偶数交替打印
更多推荐
用Java实现多线程打印奇偶数
发布评论