温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java线程的通信怎么实现

发布时间:2022-01-11 17:27:32 来源:亿速云 阅读:101 作者:iii 栏目:大数据

这篇文章主要介绍了Java线程的通信怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java线程的通信怎么实现文章都会有所收获,下面我们一起来看看吧。

//协作模型——生产者消费者实现方式一——信号灯法//借助标志位----flag是关键public class ThreadCopperator02 {public static void main(String[] args) {Tv tv=new Tv();new Watcher(tv).start();new Player(tv).start();


    }
}//消费者 观众class Watcher extends Thread{Tv tv;public Watcher(Tv tv) {this.tv = tv;
    }@Override    public void run() {for (int i = 0; i < 20; i++) {tv.watch();
        }

    }
}//生产者 演员class Player extends Thread{Tv tv;public Player(Tv tv) {this.tv = tv;
    }@Override    public void run() {for (int i = 0; i < 20; i++) {if(i%2==0){this.tv.play("奇葩说");
            }else{this.tv.play("立白");
            }

        }

    }
}//同一个资源 电视class Tv{String voice;//信号灯    //如果为true,则演员表演,观众等待    //如果为false,观众观看,演员等待    boolean flag=true;public synchronized  void play(String voice){//演员等待        if(!flag){try {this.wait();//wait会释放锁            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }//表演        System.out.println("表演了"+voice);this.voice=voice;//唤醒了watch的线程的wait,从而执行下面的程序 ,从而输出”听到了。。。“        this.notifyAll();//切换标志        this.flag=!flag;

    }//因为有锁,所以线程要等待,一个一个地来    public synchronized void watch(){//观众等待        if(flag){try {this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }//观看        System.out.println("听到了"+voice);//唤醒了play的线程的wait,从而执行下面的程序 ,从而输出”表演了。。。“        this.notifyAll();//切换标志        this.flag=!flag;
    }

}

关于“Java线程的通信怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java线程的通信怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI