Java多线程编程--(5)Java多线程互斥小例子

前几篇写了Java从出生就支持的多线程的一些技术,打算往后就写一下Java 5.0新推出的多线程编程相关的包和类,今天就写一个小例子作为老技术部分的小结吧。上题:

“A线程循环n次输出语句,然后B线程循环m次输出语句,然后再由A线程循环n次输出语句,B循环m次输出语句.....如此反复50次即可。”

package cn.test;

public class ThreadExclusiveTest {

	public static void main(String[] args) {
		
		final ThreadTask tt = new ThreadTask();
		new Thread(new Runnable(){

			@Override
			public void run() {
				
				int i = 0;
				while(i<50){
					
					tt.firstTask(100, 0, i+1);
					i++;
				}
			}
			
		}, "B线程").start();
		
		new Thread(new Runnable(){

			@Override
			public void run() {
				
				int i = 0;
				while(i<50){
					
					tt.firstTask(10, 1, i+1);
					i++;
				}
			}
			
		}, "A线程").start();
	}

}

/**
 * 线程执行任务类,其中封装了线程需要执行的所有任务,各个任务之间的互斥在该类中进行处理!
 */
class ThreadTask {
	
	private int controller = 0;
	
	/**
	 * 第一任务:线程的具体执行逻辑。
	 * @param executeTimes 输出次数
	 * @param ctrlWaitValue 线程等待的控制值
	 * @param executeTimes
	 */
	public synchronized void firstTask(int executeTimes, int ctrlWaitValue, int loopTime){
		
		while(controller%2 == ctrlWaitValue){
			
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		for(int i=0; i<executeTimes; i++){
			
			System.out.println(Thread.currentThread().getName() + " 开始第 " + i + " 次执行!第  " +loopTime+" 主循环!");
		}
		controller++;
		notifyAll();
	}
}


上例中,将题目中的任务封装在类ThreadTask的方法firstTask中,测试类中,A线程先循环10次,B线程循环50次,然后A在循环10次,依次进行50次,结束。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值