java 多线程6 不同线程操作不同的任务 用r.wait()和r.notify()方法
2017-11-13 22:37
513 查看
1.普通多线程输入输出,会出现男女不分的情况:
使用等待唤醒机制解决一片一片的问题
结果:
==========================================
4.优化整理代码:
============================================
怎么让丽丽-女不是一片一片的出,而是一个一个的出呢?用r.wait()和r.notify()方法
优化后代码如下:
package DuoThread; import java.math.BigDecimal; public class Test { public static void main(String[] args) { test1(); } private static void test1() { Resource r=new Resource(); Input in=new Input(r); Output out=new Output(r); Thread t1=new Thread(in); Thread t2=new Thread(out); t1.start(); t2.start(); } } class Input implements Runnable{ Resource r; Input(Resource r){ this.r=r; } @Override public void run() { int x=0; while (true){ synchronized (r){ if(r.isFlag()){ try { r.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if(x==0){ r.setName("chm"); r.setSex("boy"); } else { r.setName("莉莉莉莉莉莉"); r.setSex("女女女女女女"); } r.setFlag(true); r.notify(); } x=(x+1)%2; } } } class Output implements Runnable{ Resource r; Output(Resource r){ this.r=r; } @Override public void run() { while (true){ synchronized (r){ if(!r.isFlag()){ try { r.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(r.getName()+"..."+r.getSex()); r.setFlag(false); r.notify(); } } } } class Resource{ private String name; private String sex; private boolean flag; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } }
使用等待唤醒机制解决一片一片的问题
结果:
==========================================
4.优化整理代码:
============================================
怎么让丽丽-女不是一片一片的出,而是一个一个的出呢?用r.wait()和r.notify()方法
优化后代码如下:
相关文章推荐
- Java 多线程(七) 线程间的通信——wait及notify方法
- java-线程的sleep(),wait(),notify(),yield()方法的区别
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- Java 多线程(七) 线程间的通信——wait及notify方法
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- JAVA5多线程---Condition使用---线程通信 --wait及notify方法
- Java 多线程(七) 线程间的通信——wait及notify方法
- 关于Java线程的sleep(),wait(),notify(),notifyall(),interrupt()等各种方法
- Java 多线程(七) 线程间的通信——wait及notify方法
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- Java线程等待wait通知notify方法的使用
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- java线程的wait方法和notify方法的运用
- Java 多线程 线程间的通信——wait及notify方法
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java 多线程之线程间的通信——wait及notify方法
- java线程中的sleep/wait/notify/yield/interrupt方法 整理
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- java中线程阻塞之sleep、suspend、join、wait、resume、notify方法解析(一)
- Java 线程间的通信——wait及notify方法