分析问题:
- 两个线程,分别是主线程,和分支线程
- 主线程独立运行20次,分支线程独立运行50次
- 循环运行100次
- 主线程和分支线程要实现互斥
- 主线程和分支线程要通信
代码:
public class Thread1 {
/**
* 创建两个线程 分别调用外部类中的两个方法
* @param args
*/
public static void main(String[] args) {
WorkThread workThread=new WorkThread();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
workThread.runThread();
}
}
}).start();
for (int i = 0; i < 50; i++) {
workThread.runMain();
}
}
}
//外部类
class WorkThread {
//标识符 用来通信作用
private boolean flag=false;
//主线程运行
public synchronized void runMain() {
while(flag){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = 0; i < 20; i++) {
System.out.println("this marin" + i);
}
flag=true;
notify();
}
//分支线程运行
public synchronized void runThread() {
while(!flag){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = 0; i < 50; i++) {
System.out.println("this thread" + i);
}
flag=false;
notify();
}
}