Java多线程实现自然同步(内含演示案例)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java多线程实现自然同步(内含演示案例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2238字,纯文字阅读大概需要4分钟。
内容图文
1.准备一个生产者类:
public class Producer extends Thread{ private String name; private Market mkt; staticint count; public Producer(String name, Market mkt) { super(name); this.mkt = mkt; } @Override publicvoid run() { this.name = Thread.currentThread().getName(); System.out.println(name+"开始生产了!"); for (int i = 0; i < 5; i++) { try { Thread.sleep((long)(2000*Math.random())); } catch (InterruptedException e) { e.printStackTrace(); } count ++; String goods = "商品"+count; mkt.set(goods); } System.out.println(name+"生产完成!"); } }
2.准备一个消费者类:
public class Consumer extends Thread{ private String name; private Market mkt; public Consumer(String name,Market mkt){ super(name); this.mkt = mkt; } @Override publicvoid run() { this.name = Thread.currentThread().getName(); System.out.println(name+"开始消费了!"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; i++) { try { Thread.sleep((long)(2000*Math.random())); } catch (InterruptedException e) { e.printStackTrace(); } String shoppingCart = mkt.get(); sb.append(shoppingCart).append(" | "); } System.out.println(name+"消费者购物完毕,所购清单如下:"); System.out.println("\t"+sb); } }
3.准备一个商场类:
public class Market { private String shelf; private boolean flag; public synchronized void set(String goods){ String name = Thread.currentThread().getName(); while(flag){ try { System.out.println(name+"试图上货但货架已满,请等待消费!"); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.shelf = goods; this.flag = true; System.out.println(name+"已将"+goods+"上货,可以消费了!"); this.notify(); } publicsynchronized String get(){ String name = Thread.currentThread().getName(); while(!flag){ System.out.println(name+"试图购物,但货架已空,请等待上货!"); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } String shoppingCart = shelf; this.shelf = null; this.flag = false; System.out.println(name+"购买了一个"+shoppingCart+"!"); this.notify(); return shoppingCart; } }
4.测试类:
public class Start { public static void main(String[] args) { Market mkt = new Market(); Producer p1 = new Producer("工人1", mkt); Producer p2 = new Producer("工人2", mkt); Consumer c = new Consumer("顾客", mkt); p2.start(); c.start(); p1.start(); } }
原文:http://www.cnblogs.com/lxcmyf/p/6548803.html
内容总结
以上是互联网集市为您收集整理的Java多线程实现自然同步(内含演示案例)全部内容,希望文章能够帮你解决Java多线程实现自然同步(内含演示案例)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。