博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程间通信
阅读量:6113 次
发布时间:2019-06-21

本文共 1548 字,大约阅读时间需要 5 分钟。

线程间通信:针对同一个资源的操作有不同种类的线程。  比如有卖票的,也有买票的。

     等待唤醒机制:

Object类中提供了3个方法:

wait():等待

notify():唤醒单个线程

notifyAll():唤醒多个线程

这些方法在Object类而不是在Thread类的原因是:方法调用必须通过锁对象调用,而锁对象可以是任意对象。

 

notify()和notifyAll()的区别

notify()采用顺序操作,依次排序等待

notify()采用非顺序操作,优先级高的有可能先执行

      

思路

* 生产者:先看是否有数据,有就等待,没有就生产,生产完之后通知消费者
* 消费者:先看是否有数据,有就消费,没有就等待,通知生产者生产数据

   代码表示

package cn.idcast5;public class SetThread implements Runnable {	private Student s;	private int x = 0;	public SetThread(Student s) {		this.s = s;	}	/*	 * 思路 	 * 生产者:先看是否有数据,有就等待,没有就生产,生产完之后通知消费者 	 * 消费者:先看是否有数据,有就消费,没有就等待,通知生产者生产数据	 */	@Override	public void run() {		while (true) {			synchronized (s) {				if (s.flag) { // flag默认为false,里面没有数据,所以不用等待					try {						s.wait();					} catch (InterruptedException e) {						// TODO Auto-generated catch block						e.printStackTrace();					}				}				if (x % 2 == 0) {					s.name = "哈哈哈";					s.age = 10;				} else {					s.name = "啊啊啊";					s.age = 1;				}				x++;				s.flag = true;// flag变成true,里面有数据了,所以接下来要走等待				s.notify();			}		}	}}

  

package cn.idcast5;public class GetThread implements Runnable {	private Student s;	public GetThread(Student s) {		this.s = s;	}	@Override	public void run() {		while (true) {			synchronized (s) {				if (!s.flag) {// 表示有数据,不用等待,直接变成false,然后继续等待					try {						s.wait();// t2就等待了,因为里面没有数据					} catch (InterruptedException e) {						// TODO Auto-generated catch block						e.printStackTrace();					}				}				System.out.println(s.name + "---" + s.age);				s.flag = false;				s.notify();			}		}	}}

  

转载于:https://www.cnblogs.com/zengjiao/p/6486495.html

你可能感兴趣的文章
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>
Android UI优化——include、merge 、ViewStub
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
iOS知识小集·设置userAgent的那件小事
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>