线程间通信
来源:互联网 发布:淘宝详情页文字大小 编辑:程序博客网 时间:2024/06/04 19:55
子线程循环10次,主线程循环100次交替循环50次public class TraditionalThreadCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread( new Runnable() { @Override public void run() { for (int i = 1; i <= 50 ; i++) { business.sub(i); } } } ).start(); for (int i = 1; i <= 50 ; i++) { business.main(i); } }}class Business{ private boolean bShouldSub = true; public synchronized void sub(int i){ if(!bShouldSub){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 1; j <=10 ; j++) { System.out.println("sub thread sequence of " + j + ",loop of " + i); } bShouldSub = false; this.notify(); } public synchronized void main(int i){ while(bShouldSub){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j <=100 ; j++) { System.out.println("main thread sequence of " + j + ",loop of " + i); } bShouldSub = true; this.notify(); }}
用Lock的方法public class ConditionCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread( new Runnable() { @Override public void run() { for(int i=1;i<=50;i++){ business.sub(i); } } } ).start(); for(int i=1;i<=50;i++){ business.main(i); } } static class Business{ Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); private boolean bShouldSub = true; public void sub(int i){ lock.lock(); try { while (!bShouldSub){ try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int j=1;j<=10;j++){ System.out.println("sub thread sequence of " + j + ",loop of " + i); } bShouldSub = false; condition.signal(); } finally { lock.unlock();; } } public void main(int i){ lock.lock(); try { while (bShouldSub){ try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int j=1;j<=100;j++){ System.out.println("main thread sequence of " + j + ",loop of " + i); } bShouldSub = true; condition.signal(); } finally { lock.unlock();; } } }}
三个线程通信import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreeConditionCommunication {/** * @param args */public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub2(i);}}}).start();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub3(i);}}}).start();for(int i=1;i<=50;i++){business.main(i);}}static class Business {Lock lock = new ReentrantLock();Condition condition1 = lock.newCondition();Condition condition2 = lock.newCondition();Condition condition3 = lock.newCondition(); private int shouldSub = 1; public void sub2(int i){ lock.lock(); try{ while(shouldSub != 2){ try {condition2.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=10;j++){System.out.println("sub2 thread sequence of " + j + ",loop of " + i);} shouldSub = 3; condition3.signal(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try{ while(shouldSub != 3){ try {condition3.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=20;j++){System.out.println("sub3 thread sequence of " + j + ",loop of " + i);} shouldSub = 1; condition1.signal(); }finally{ lock.unlock(); } } public void main(int i){ lock.lock(); try{ while(shouldSub != 1){ try {condition1.await();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }for(int j=1;j<=100;j++){System.out.println("main thread sequence of " + j + ",loop of " + i);}shouldSub = 2;condition2.signal(); }finally{ lock.unlock(); } }}}
阅读全文
0 0
- 线程同步--线程间通信
- 线程同步--线程间通信
- JAVASE线程---线程间通信
- JAVA线程-线程间通信
- 线程3:线程间通信
- 线程与线程间通信
- 线程间通信
- c#线程间通信
- VC 线程间通信
- 线程间通信 ManualResetEvent
- java 线程间通信
- android线程间通信
- VC 线程间通信
- 线程间通信方式
- QT---线程间通信
- Android线程间通信
- 线程间的通信
- linux线程间通信
- Unity | 置顶窗口
- 分页(对查询出的数据进行分页显示)
- Java中的继承和组合
- Flask中的flash消息
- HihoCoder 1233 Boxes (bfs 状压)
- 线程间通信
- 上传图片时,需注意事项
- HTML5基本内容
- Android自定义view的点击事件
- TableView
- 输出随机认证码图片
- 8.自定义函数综合应用示例
- python sort、sorted高级排序技巧
- [codefoces439C]The Intriguing Obsession(组合数学)