网站大量收购闲置独家精品文档,联系QQ:2885784924

40.Java中线程间通信.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
40.Java中线程间通信剖析

Java中线程间通信线程间通信(通讯):多个线程在处理同一个资源,但任务不同。一、等待/唤醒机制:涉及的方法:(1) wait(); 使线程处于冻结状态,被wait的线程会存储到线程池(等待集)中;(2) notify(); 唤醒线程池中的一个线程,这个线程是任意的;(3) notifyAll();唤醒线程池中的所有线程。这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法;而且必须要明确到底操作的是哪个锁上的线程。即必须明确线程由那个监视器监视。监视器:就是所说的锁。为什么操作线程的方法wait()、notify()、notifyAll()定义在了Object类中?答:因为这些方法就是监视器的方法,监视器就是锁,锁可以是任意的对象,如 Object obj = new Object();既然可以是任意对象,那么这些方法需要定义在最高的类中,即定义在Object类中。线程间通信的示例://创建一个资源类,存放资源class Resource { private String name;private String sex;privatebooleanflag = false;publicsynchronizedvoid input(String name, String sex) {if (flag)try {this.wait(); } catch (InterruptedException e) { }this.name = name;this.sex = sex;flag = true;this.notify(); }publicsynchronizedvoid output() {if (!flag)try {this.wait(); } catch (InterruptedException e) { }System.out.println(name + 的性别: + sex);flag = false;this.notify(); }}//创建输入的run方法,利用类对任务进行封装class Input implements Runnable { Resource r = null; Input(Resource r) {this.r = r; }publicvoid run() {intx = 0;for (inti = 10; i 0; i--) {if (x == 0)r.input(KangKang, 男);elser.input(Jane, 女);x = (x + 1) % 2;} }}//利用类实现对输出任务的封装class Output implements Runnable { Resource r = null; Output(Resource r) {this.r = r; }publicvoid run() {for (inti = 10; i 0; i--)r.output(); }}//主方法所在的类publicclass ThreadCommunication {publicstaticvoid main(String[] args) {Resource r = new Resource();//创建一个资源对象,使下面两个线程同时操作同一个资源对象Input in = new Input(r);Output out = new Output(r);Thread tin = new Thread(in);Thread tout = new Thread(out);tin.start();tout.start(); }}结果:(实现一次赋值,一次输出,两个线程交替进行)KangKang 的性别:男Jane 的性别:女KangKang 的性别:男Jane 的性别:女KangKang 的性别:男Jane 的性别:女KangKang 的性别:男Jane 的性别:女KangKang 的性别:男Jane 的性别:女生产者—消费者模式:单生产者—单消费者模式:class Resource1 {privateintcount = 0;// 生产物品编号private String name;privatebooleanflag = false;publicsynchronizedvoid produce(String name) {this.name = name;if (flag)try {this.wait(); } catch (InterruptedException e) { }this.count++;System.out.println(生产的 + this.

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档