线程间的通信
2016-01-16 18:32
369 查看
package com.ygl;
public class CommunicationRunnable implements Runnable{
private Business business;
public CommunicationRunnable() {
}
public CommunicationRunnable(Business business) {
this.business=business;
}
@Override
public void run() {
for(int i=1;i<=50;i++){
business.sub(i);
}
}
}
//*************************************************
package com.ygl;
public class Business {
private boolean isShouldSub=true;
//主线程、子线程关联的代码归为一类
public synchronized void sub(int i){
while(!isShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("sub thread"+i+"========"+j);
}
isShouldSub=false;
this.notify();
}
public synchronized void main(int i){
while(isShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("main thread"+i+"========"+j);
}
isShouldSub=true;
this.notify();
}
}
//************************************************
package com.ygl;
public class TraditionalThreadCommunication {
public static void main(String[] args) {
Business business=new Business();
CommunicationRunnable communicationRunnable=new CommunicationRunnable(business);
Thread thread=new Thread(communicationRunnable);
thread.start();
for(int i=1;i<=50;i++){
business.main(i);
}
}
}
public class CommunicationRunnable implements Runnable{
private Business business;
public CommunicationRunnable() {
}
public CommunicationRunnable(Business business) {
this.business=business;
}
@Override
public void run() {
for(int i=1;i<=50;i++){
business.sub(i);
}
}
}
//*************************************************
package com.ygl;
public class Business {
private boolean isShouldSub=true;
//主线程、子线程关联的代码归为一类
public synchronized void sub(int i){
while(!isShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("sub thread"+i+"========"+j);
}
isShouldSub=false;
this.notify();
}
public synchronized void main(int i){
while(isShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("main thread"+i+"========"+j);
}
isShouldSub=true;
this.notify();
}
}
//************************************************
package com.ygl;
public class TraditionalThreadCommunication {
public static void main(String[] args) {
Business business=new Business();
CommunicationRunnable communicationRunnable=new CommunicationRunnable(business);
Thread thread=new Thread(communicationRunnable);
thread.start();
for(int i=1;i<=50;i++){
business.main(i);
}
}
}
相关文章推荐
- Leetcode 238 Product of Array Except Self 递推
- 计算匹配字符串的个数
- c# 使用c++指针
- centOSmini安装教程
- 老老实实做站 首页自然回归第一
- strong与weak的区别
- LeetCode Subsets
- jenkins+svn+android studio自动化构建(持续集成)
- iOS 8 自适应 Cell
- VS2010 运行程序、批处理指令
- 快速排序
- java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher
- VS2010 MFC 创建文件目录
- NSString什么时候用copy,什么时候用strong
- Qt creater设置成黑色主题
- 数据结构_7:图算法 :最短路径
- 事务隔离级别
- 哈理工OJ 1522 子序列的和(单调队列)(dp)
- Hbase0.96源码之HMaster(二)Hmaster主要循环becomeActiveMaster
- 删除链表中倒数第n个节点