要求:子线程运行执行10次后,主线程再运行5次,这样交替运行三遍
package multiThread;
public class MultiThread {
public static void main(String[] args) {
MultiThread test = new MultiThread();
//子线程
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<3;i++){
test.subThread();
}
}
}).start();
//主线程
for(int i=0;i<3;i++){
test.mainThread();
}
}
//标识子进程是否可以运行
private static volatile boolean flag = true;
public synchronized void subThread(){
while (!flag){//flag==false时,主进程运行,子进程等待
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
//flag==true,子进程运行10次
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+":sub method running "+i);
}
//唤醒主进程
flag=false;
notify();
}
public synchronized void mainThread(){
while(flag){ //flag==true,子进程运行,主进程等待
try {
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
//flag==false时,主进程可以运行五次
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+":main method running "+i);
}
//唤醒子进程
flag=true;
notify();
}
}
运行结果:
Thread-0:sub method running 0
Thread-0:sub method running 1
Thread-0:sub method running 2
Thread-0:sub method running 3
Thread-0:sub method running 4
Thread-0:sub method running 5
Thread-0:sub method running 6
Thread-0:sub method running 7
Thread-0:sub method running 8
Thread-0:sub method running 9
main:main method running 0
main:main method running 1
main:main method running 2
main:main method running 3
main:main method running 4
Thread-0:sub method running 0
Thread-0:sub method running 1
Thread-0:sub method running 2
Thread-0:sub method running 3
Thread-0:sub method running 4
Thread-0:sub method running 5
Thread-0:sub method running 6
Thread-0:sub method running 7
Thread-0:sub method running 8
Thread-0:sub method running 9
main:main method running 0
main:main method running 1
main:main method running 2
main:main method running 3
main:main method running 4
Thread-0:sub method running 0
Thread-0:sub method running 1
Thread-0:sub method running 2
Thread-0:sub method running 3
Thread-0:sub method running 4
Thread-0:sub method running 5
Thread-0:sub method running 6
Thread-0:sub method running 7
Thread-0:sub method running 8
Thread-0:sub method running 9
main:main method running 0
main:main method running 1
main:main method running 2
main:main method running 3
main:main method running 4