多线程间的通信问题之交替打印
来源:互联网 发布:淘宝淘客 编辑:程序博客网 时间:2024/06/02 05:17
1.要实现的效果,直接上图:
1.具体逻辑很清晰,就是通过多线程来实现直接上代码,lock控制相同的输入或输出线程的同步,resource控制着输入和输出线程的同步
class Resource{private String name;private String sex;private boolean flag;public void setName(String name){this.name=name;}public void setSex(String sex){this.sex=sex;}public void setFlag(boolean flag){this.flag=flag;}public String getName(){return this.name;}public String getSex(){return this.sex;}public boolean getFlag(){return this.flag;}}class Input implements Runnable{private static final Object lock=new Object();int num=0;Resource resource;public Input(Resource resource){this.resource=resource;}@Overridepublic void run() {// TODO Auto-generated method stubwhile (!Thread.interrupted()) {//调用interrupt方法时终止线程synchronized (lock) {synchronized (resource) {if(resource.getFlag()){try {resource.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if((num&1)==0)//用奇数偶数来实现交替输出{resource.setSex("male");resource.setName("mnmlist");}else{resource.setSex("female");resource.setName("sting");}num++;if(num>10000)Thread.currentThread().interrupt();resource.setFlag(true);resource.notify();}}}}}class Output implements Runnable{private static final Object lock=new Object();int num=0;Resource resource;public Output(Resource resource){this.resource=resource;}@Overridepublic void run() {// TODO Auto-generated method stubwhile (!Thread.interrupted()) {synchronized (lock) {synchronized (resource) {if(!resource.getFlag()){try {resource.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName()+","+(++num)+"th,姓名:"+resource.getName()+",性别:"+resource.getSex());if(num>10000)Thread.currentThread().interrupt();resource.setFlag(false);resource.notify();}}}}}public class OneAfterAnotherOutput {public static void main(String[] args) {// TODO Auto-generated method stubResource resource=new Resource();Input input=new Input(resource);Output output=new Output(resource);Input input1=new Input(resource);Output output1=new Output(resource);Thread inputThread=new Thread(input);Thread outputThread=new Thread(output);Thread inputThread1=new Thread(input1);Thread outputThread1=new Thread(output1);inputThread.start();outputThread.start();inputThread1.start();outputThread1.start();}}
0 0
- 多线程间的通信问题之交替打印
- 多线程交替打印数字
- 多线程交替打印数字
- 多线程同步之事件 -- 2个线程交替打印数字
- 多线程交替打印A,B
- 正确的多线程交替打印,经典卖票案例
- 多线程交替打印ABC的多种实现方法
- 多线程交替打印ABC的多种实现方法
- java多线程交替打印0-100的奇偶数
- 多线程间的通信问题
- 三个线程交替打印A、B、C的问题
- Java多线程交替打印奇数和偶数
- 10072---多线程交替打印奇偶数
- java多线程交替打印数字和字母
- 两个线程的交替打印
- 黑马程序员——JAVA基础---线程之间的通信实现交替输出打印
- Java多线程的交替执行
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区<另外的写法>
- sudo apt-get update遇到的问题
- 以SYSTEM权限运行程序
- APNs消息推送完整讲解
- JAVA设计模式
- Java aio(异步网络IO)初探
- 多线程间的通信问题之交替打印
- C++ 第四章课后习题作业
- myBatis批量添加,修改和删除
- 第1条 考虑用静态工厂方法代替构造器
- 时间正则表达式
- Linux下ctrl+s假死恢复
- 关于CLASS , SEL, IMP的说明
- android 学习笔记-基本控件
- CefGetProxyForUrl