`
lijunaccp
  • 浏览: 152497 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

并发库锁条件替代互斥锁

 
阅读更多
package com.test;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadTest9
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		final Utils9 ts = new Utils9();
		new Thread(){
			@Override
			public void run()
			{
				for (int i = 0; i < 30; i++)
				{
					ts.sub(i);
				}
			}
		}.start();
		
		new Thread(){
			@Override
			public void run()
			{
				for (int i = 0; i < 30; i++)
				{
					ts.sub2(i);
				}
			}
		}.start();
		
		for (int i = 0; i < 30; i++)
		{
			ts.main(i);
		}
	}
	


}

class Utils9{
	
	private int who = 1;
	
	Lock lock = new ReentrantLock();
	Condition condition1 = lock.newCondition();
	Condition condition2 = lock.newCondition();
	Condition condition3 = lock.newCondition();
	
	public void main(int j){
		lock.lock();
		try{
			if(who != 1){
				try
				{
					condition1.await();
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			for (int i = 1; i <= 5; i++)
			{
				System.out.println("this's main "+j+" runnig is "+i);
			}
			this.who = 2;
			condition2.signal();
		}finally{
			lock.unlock();
		}
	}
	
	public void sub(int j){
		lock.lock();
		try{
			if(who != 2){
				try
				{
					condition2.await();
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			for (int i = 1; i <= 10; i++)
			{
				System.out.println("this's sub "+j+" runnig is "+i);
			}
			this.who = 3;
			condition3.signal();
		}finally{
			lock.unlock();
		}
	}
	
	public void sub2(int j){
		lock.lock();
		try{
			if(who != 3){
				try
				{
					condition3.await();
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			for (int i = 1; i <= 6; i++)
			{
				System.out.println("this's sub2 "+j+" runnig is "+i);
			}
			this.who = 1;
			condition1.signal();
		}finally{
			lock.unlock();
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics