java多线程问题


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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值