线程间的通信方式java,java线程代码实例
什么是线程通信、如何实现?
所谓线程通信,就是线程之间互相发送数据,线程通信通常是通过共享一个数据来实现的。
线程会根据共享数据的情况决定做什么,并通知其他线程做什么。
线程通信常见模型
生产者与消费者模型:生产者线程负责生产数据,消费者线程负责消费数据。
要求:生产者线程在产生数据后唤醒消费者,然后等待自己;消费者消费完数据后,唤醒生产者,等待自己。
公共类多线程_5线程通信扩展线程{ public static void main(String[]args){//定义线程类,创建一个共享的账户对象账户3a=新帐户3(abc ,0);//创建两个取钱的线程对象新的drawthread3(a,小明).start();新的drawthread3(a,小红).start();//创建三个存钱的线程对象新的存储线程(一个,存钱罐数字一(一)号).start();新的存储线程(一个,存钱罐注射毒品号).start();新的存储线程(一个,存钱罐3号).start();}}//存钱的线程类类保存线程扩展线程{ //接收处理的账户对象私人账户accpublic save thread(account 3 ACC,String name){ super(name);this . ACC=ACC } public void run(){ try { while(true){//存钱ACC。省钱(100000);//休眠注射毒品秒线程.睡眠(2000年);} }捕捉(异常e){ e . printstacktrace();} }}//取钱的线程类类拉丝3扩展了线程{ //接收处理的账户对象私人账户accpublic draw thread 3(account 3 ACC,String name){ super(name);this . ACC=ACC } public void run(){ try { while(true){//取钱ACC。取钱3(100000);//休眠注射毒品秒线程.睡眠(2000年);} }捕捉(异常e){ e . printstacktrace();} } } class account 3 {私有字符串cartId私人双钱;//账户余额公众号3(){ }公众号3(String cartId,double money){ this。cartId=cartIdthis.money=钱;}公共字符串get cartId(){ return cartId;} public void setCartId(String cartId){ this。cartId=cartId} public double getMoney(){ return money;} public void set money(双钱){ this。钱=钱;}公共同步void savemoney(double money) { //先获取是谁来存钱,线程名即是人名字符串名称=线程。当前线程().getName();//判断账户是否有钱试试{ if(this.money==0){ //没钱,存钱this.money=钱;System.out.println(name 来存钱,存了:"钱"存钱后余额为:这个。钱);//有钱了//唤醒所有线程这个。notify all();//锁对象,让当前线程进入等待这个。wait();}else { //有钱,不存钱//唤醒所有线程这个。notify all();//锁对象,让当前线程进入等待这个。wait();} }捕捉(异常e){ e . printstacktrace();} }公共同步void drawmoney3(double money) { //先获取是谁来取钱,线程名即是人名字符串名称=线程。当前线程().getName();尝试{ //判断账户是否够钱if(this.money=money){ //有钱,取钱这个。钱-=钱;System.out.println(name 来取钱成功,取了:"钱"余额是:这个。钱);//没钱了//唤醒所有线程这个。notify all();//锁对象,让当前线程进入等待这个。wait();}else{ //余额不足//唤醒所有线程这个。notify all();//锁对象,让当前线程进入等待这个。wait();} }捕捉(异常e){ e . printstacktrace();} }}
以上就是爪哇实现线程通信的案例讲解的详细内容,更多关于爪哇线程通信的资料请关注盛行信息技术其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。