Java两个线程轮换打印1-100内的奇数和偶数
2013-01-31 15:43
549 查看
问题:
两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。
两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。
public class Test { //state==1表示线程1开始打印,state==2表示线程2开始打印 private static int state = 1; private static int num1 = 1; private static int num2 = 2; public static void main(String[] args) { final Test t = new Test(); new Thread(new Runnable() { @Override public void run() { while(num1<100){ //两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印 synchronized (t) { // 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用t的wait()方法, 直到下次被唤醒 if(state!=1){ try { t.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 当state=1时, 轮到线程1打印5次数字 for(int j=0; j<5; j++){ System.out.println(num1); num1 += 2; } // 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印 state = 2; // notifyAll()方法唤醒在t上wait的线程2, 同时线程1将退出同步代码块, 释放t锁 t.notifyAll(); } } } }).start(); new Thread(new Runnable() { @Override public void run() { while(num2<100){ synchronized (t) { if(state!=2){ try { t.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int j=0; j<5; j++){ System.out.println(num2); num2 += 2; } state = 1; t.notifyAll(); } } } }).start(); } }
相关文章推荐
- java两个线程打印奇数和偶数
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- 使用两个线程交替打印0到100的奇数和偶数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- 多线程技术: 两个线程交替打印奇数和偶数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- 实现两个线程A,B,A打印5个奇数,B打印5个偶数,交替进行,如此循环50次
- java两个线程轮流输出奇数和偶数到100
- 多线程技术: 两个线程交替打印奇数和偶数
- 两个线程交替打印字母 java
- Java两个线程交替打印(实现Runnable接口)
- Java 多线程 子线程 交替打印 奇偶数
- 使用Java线程并发库实现两个线程交替打印的线程题
- 打印一个数组中的数字,2个线程,一个打印奇数,一个打印偶数,交叉打印结果。
- 阿里面试经历回顾(两个线程分别打印0-100之间的奇偶数)
- Java多线程通信之两个线程分别打印AB各10次
- 用java写两个线程,一个线程打印1-52,另一个线程打印字母A-Z
- 使用Java线程并发库实现两个线程交替打印的线程题
- java代码:用for循环求和,求偶数和,求奇数和,打印水仙花数,统计水仙花数