大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要为大家展示了“java线程的应用场景有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java线程的应用场景有哪些”这篇文章吧。
秦安ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
解决生产者,消费者存在问题,可使用如下方法(代码示例包含):
1. 解决数据同步问题:使用同步代码块;
2. 解决重复问题:
加入等待与唤醒机制-->由Object类提供方法:
等待:public final void wait() throws InterruptedException
唤醒第一个等待线程:public final void notify();
唤醒全部等待线程:public final void notifyAll();
代码示例:
** * 生产者消费者实体 * YangKuo 2018/11/15 18:21 */ public class Info { private String title; private String content; /** * flag=true 表示可以生产,但不能取走 * flag=false 表示不能生产,可以取走 */ private Boolean flag = true; public synchronized void setInfo(String title, String content) throws InterruptedException { if (!flag) {//此时不能够进行生产,等待取走 super.wait(); } Thread.sleep(100); this.title = title; this.content = content; flag = false;//生产完成 super.notify(); } public synchronized void getInfo() throws InterruptedException { if (flag) {//此时应该生产,不应该取走 super.wait();//等待 } Thread.sleep(100); System.out.println(this.title + "----->" + this.content); flag = true;//消费完成 super.notify(); } } /** * 生产者 * YangKuo 2018/11/15 18:26 */ public class Producer implements Runnable { private Info info; public Producer(Info info) { this.info = info; } @Override public void run() { for (int x = 0; x < 50; x++) { if (x % 2 == 0) { try { info.setInfo("张三","一个帅哥"); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { info.setInfo("小白兔","一个可爱的小动物"); } catch (InterruptedException e) { e.printStackTrace(); } } } } } /** * 消费者 * YangKuo 2018/11/15 18:26 */ public class Customer implements Runnable { private Info info; public Customer(Info info) { this.info = info; } @Override public void run() { for (int x = 0; x < 50; x++) { try { info.getInfo(); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 生产者,消费者测试 * YangKuo 2018/11/15 18:35 */ public class Test { public static void main(String args[]) { Info info = new Info(); Producer p = new Producer(info); Customer c = new Customer(info); new Thread(p).start(); new Thread(c).start(); } }
补充:wait()与Sleep方法的区别
wait(): Object类定义的方法,表示线程要等待执行,必须通过notify(),notifyAll()方法唤醒
Sleep(): 是Thread类定义的方法,在休眠到一定时间后将自己唤醒。
以上是“java线程的应用场景有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!