![[javaSE] 多线程通信(等待-唤醒机制),第1张 [javaSE] 多线程通信(等待-唤醒机制),第1张](/aiimages/%5BjavaSE%5D+%E5%A4%9A%E7%BA%BF%E7%A8%8B%E9%80%9A%E4%BF%A1%EF%BC%88%E7%AD%89%E5%BE%85-%E5%94%A4%E9%86%92%E6%9C%BA%E5%88%B6%EF%BC%89.png)
两个线程 *** 作同一个资源,比如,输入和输出, *** 作同一个对象,此时两个线程会争夺cpu的执行权,随机的进行切换。我们想实现先输入再输出,顺序的执行
目标对象定义一个标记字段,进行判断,wait()和notify()方法
wait()方法,线程会处于等待状态,等待的线程位于内存中的线程池中
notify()方法,唤醒线程池中的线程
notifyAll()方法,唤醒全部线程
上面的方法,需要写在同步里面,并且需要标识锁
这些 *** 作线程的方法定义在Object对象中,因为这些方法,要通过同一个锁对象来调用
/** * 资源 * * @author taoshihan * */class People { String name; String sex; Boolean myLock = false;} * 输入 * * class PeopleJoin implements Runnable { private People resource; public PeopleJoin(People resource) { this.resource = resource; } @OverrIDe public voID run() { // 切换 boolean flag = true; while () { synchronized (resource) { if (resource.myLock) { try { resource.wait(); } catch (InterruptedException e) { e.printstacktrace(); } } (flag) { resource.name = "taoshihan"; resource.sex = "nan"; } else { resource.name = "陶士涵"; resource.sex = "男"; } flag = !flag; resource.myLock=; resource.notify(); } } }} * 输出 * * class PeopleOut PeopleOut(People resource) { if(!resource.myLock){ (InterruptedException e) { e.printstacktrace(); } } System.out.println(resource.name + "=====" + resource.sex); resource.myLock= ThreadDemo { * @param args */ static main(String[] args) { People resource = new People(); PeopleJoin input = PeopleJoin(resource); PeopleOut output = PeopleOut(resource); Thread t1 = Thread(input); Thread t2 = Thread(output); t1.start(); t2.start(); }}
总结
以上是内存溢出为你收集整理的[javaSE] 多线程通信(等待-唤醒机制)全部内容,希望文章能够帮你解决[javaSE] 多线程通信(等待-唤醒机制)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)