java多线程问题

来源:互联网 发布:无锡服务器数据恢复 编辑:程序博客网 时间:2024/06/06 03:30


   一提到多线程,大家都会想到多线程的实现方式之类的一些东西,但是仅仅是知道这些,下面给大家分享一道常见面试题,理解了这道题,那应该会对多线程更加深一些了解。


    问题:子线程执行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;}}
                                                                                                                                                              

                                                                                                                                             111 

0 0
原创粉丝点击