多线程技术: 两个线程交替打印奇数和偶数
2017-01-17 13:46
489 查看
1. 要打印的资源
2. 打印奇数的线程
3. 打印偶数的线程
4. 主函数
5. 运行结果
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. 运行结果
相关文章推荐
- jvm理论-常量池-string
- Git工作流程及一些小知识点
- Window.location.hash属性介绍
- perl 文件句柄
- JAVA--继承与初始化
- excel导入
- 用VS2005+Driverstudio+DDK开发第一个PCI驱动程序(详解)
- 面向对象的三大基本特性,五大基本原则
- 软考直播说明会-深度解析软考中高项最新动态
- 海量数据分析
- 机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩
- mybatis-generator-core 代码修改
- HDU1298 字典树+dfs
- ubuntu出现apt-get source squid
- Android 开发中的 Manifest.xml 配置文件详解
- 基于dragonboard 410c的智能魔镜设计(9)——UI交互控制逻辑实现
- eclispe for javaEE
- open vswitch分析
- 混合运算规则
- Camera图像处理原理及实例分析-重要图像概念