一提到多线程,大家都会想到多线程的实现方式之类的一些东西,但是仅仅是知道这些,下面给大家分享一道常见面试题,理解了这道题,那应该会对多线程更加深一些了解。
问题:子线程执行10次,主线程执行10次,然后子线程执行10次,主线程执行10次,循环20次,写出程序代码。。。大概就是这样的。
package com.asiainfo;
/**
*
* @Description: TODO
* @author zhuyh3
* @date 2017-4-17 下午5:34:02
*/
public class TestMutiThread {
public static void main(String[] args) {
final ExecMethod em = new ExecMethod();
//子线程
new Thread(new Runnable(){ //创建线程
public void run() {
for(int i = 1 ; i <= 5 ; i++){
em.sub(i);
}
}
}).start();
//主线程
for(int i = 1 ; i <= 5 ; i++){
em.main(i);
}
}
}
class ExecMethod{ //创建业务处理类
static boolean flag = true; //来限制先执行子线程
public synchronized void main(int i){
if(flag){
try {
this.wait(); //线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j = 1 ; j <= 10 ; j++){
try {
Thread.sleep(100);
System.out.println("主线程执行第" + j + "次,该线程在当前第" + i + "个循环");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify(); //线程唤起
flag = true;
}
public synchronized void sub(int i){
if(!flag){
try {
this.wait();//线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j = 1 ; j <= 20 ; j++){
try {
Thread.sleep(100);
System.out.println("子线程执行第" + j + "次,该线程在当前第" + i + "个循环");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();//线程唤起
flag = false;
}
}