java线程间的通信
2016-03-31 13:43
519 查看
先看代码:
运行结果:
这样就实现了线程间的通信,而且通过wait和notify实现交替输出。通过synchronized实现线程间的同步。
上面的代码有点混乱,修改后的更有封装性代码如下:
class Producter implements Runnable { Q q; public Producter(Q q) { this.q = q; } public void run() { int i = 0; while (true) { synchronized (q) { if (q.bFull) try { q.wait(); } catch (Exception e) { } if (i == 1) { q.name = "zhangsan"; try { Thread.sleep(1); } catch (Exception e) { } q.sex = "male"; } else { q.name = "lisi"; q.sex = "female"; } q.bFull = true; q.notify(); } i = (i + 1) % 2; } } } class Consumer implements Runnable { Q q; public Consumer(Q q) { this.q = q; } public void run() { while (true) { synchronized (q) { if (!q.bFull) try { q.wait(); } catch (Exception e) { } System.out.print(q.name); System.out.println(":" + q.sex); q.bFull = false; q.notify(); } } } } class Q { String name = "unkonwn"; String sex = "unkonwn"; boolean bFull = false; } class ThreadCommunation { public static void main(String[] args) { Q q = new Q(); new Thread(new Producter(q)).start(); new Thread(new Consumer(q)).start(); } }
运行结果:
这样就实现了线程间的通信,而且通过wait和notify实现交替输出。通过synchronized实现线程间的同步。
上面的代码有点混乱,修改后的更有封装性代码如下:
class Producter implements Runnable { Q q; public Producter(Q q) { this.q = q; } public void run() { int i = 0; while (true) { if (i == 0) q.put("zhangsan", "male"); else q.put("lisi", "female"); i = (i + 1) % 2; } } } class Consumer implements Runnable { Q q; public Consumer(Q q) { this.q = q; } public void run() { while (true) { q.get(); } } } class Q { private String name = "unkonwn"; private String sex = "unkonwn"; private boolean bFull = false; public synchronized void put(String name, String sex) { if (bFull) try { wait(); } catch (Exception e) { } this.name = name; try { Thread.sleep(1); } catch (Exception e) { } this.sex = sex; bFull = true; notify(); } public synchronized void get() { if (!bFull) try { wait(); } catch (Exception e) { } System.out.print(name); System.out.println(":" + sex); bFull = false; notify(); } } class ThreadCommunation { public static void main(String[] args) { Q q = new Q(); new Thread(new Producter(q)).start(); new Thread(new Consumer(q)).start(); } }
相关文章推荐
- javac。java版本切换
- java_js十六进制和ASCII码互相转换。
- java 两道华为笔试测试题目 输入 system.in
- Java并发编程:synchronized
- Spring学习记录1--@Transactional Propagation
- java里线程同步方法二:同步函数
- java里线程同步方法一:同步线程块
- java大批量生成二维码
- java中多线程Runnable接口和Thread类的区别
- Java之正则表达式
- JAVA几种代理总结
- java在处理异常时finally语句的作用
- java里自己编写抛出异常的信息
- Spring中多配置文件以及寻觅引用其他bean的方式
- java内部类
- Myeclipse创建struts.xml
- javaEE 分页功能代码优化(一)
- 关于java单态模式的基本理解
- Java JDBC 实例
- java里this的理解