您的位置:首页 > 其它

多线程技术: 两个线程交替打印奇数和偶数

2017-01-17 13:46 489 查看
1. 要打印的资源

package com.mytest.thread;

/**
* 要打印的资源
*
*/
public class Num {
int i = 1;
// 两个线程看, 交替执行的一个标志
boolean flag = false;
}


2. 打印奇数的线程

package com.mytest.thread;

public class PrintOdd implements Runnable {
Num num;

public PrintOdd(Num num) {
this.num = num;

}

public void run() {
while (num.i <= 100) {
synchronized (num) {
if (num.flag) {
try {
num.wait();
} catch (Exception e) {
System.out.println(e.getMessage());
}

} else {
System.out.println("奇数----" + num.i);
num.i++;
num.flag = true;
num.notify();
}

}
}
}
}


 

3. 打印偶数的线程

package com.mytest.thread;

public class PrintEven implements Runnable {

Num num;

public PrintEven(Num num) {
this.num = num;

}

public void run() {
while (num.i <= 100) {
synchronized (num) {// 必须要用同意吧锁对象,这个对象是num
if (!num.flag) {
try {
num.wait();// wait()函数必须和锁死同一个
} catch (Exception e) {
System.out.println(e.getMessage());
}

} else {
System.out.println("偶数----" + num.i);
num.i++;
num.flag = false;
num.notify();
}

}
}
}

}


  

4. 主函数

package com.mytest.thread;

public class Main {
public static void main(String[] args) {

Num num = new Num();

PrintOdd printOdd = new PrintOdd(num);
PrintEven printEven = new PrintEven(num);

Thread thread1 = new Thread(printOdd);
Thread thread2 = new Thread(printEven);

thread1.start();
thread2.start();
}
}


  

5. 运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: