对象池多线程使用

public class PoolUtils {

	private List<Domain> list;
	
	public void init(){
		list = new ArrayList<Domain>();
		for(int i = 0; i < 3; i++){
			list.add(new Domain());
		}
	}
	
	public synchronized Domain getDomain(){
		Domain domain = null;
		if(list.size()>0){
			domain = list.remove(0);
			System.out.println(Thread.currentThread().getName()+",get left:"+list.size());
		} else {
			try {
				System.out.println(Thread.currentThread().getName()+":wait before");
				wait();
				System.out.println(Thread.currentThread().getName()+":wait after");
			} catch (Exception e) {
				System.out.println("getException:"+e.getMessage());
				e.printStackTrace();
			}
			domain = getDomain();
		}
		return domain;
	}
	
	public synchronized void returnDomain(Domain domain){
		list.add(domain);
		System.out.println(Thread.currentThread().getName()+",return left:"+list.size());		
		notifyAll();
//		notify();
	}
}

  

public static void main(String[] args) {
		final PoolUtils pu = new PoolUtils();//单例
		
		pu.init();
		
		Thread t1 = new Thread(){
			public void run(){
				Domain dom = pu.getDomain();
				System.out.println(Thread.currentThread().getName()+":get domain:"+dom);
                try {
					Thread.currentThread().sleep(3000);
				} catch (Exception e) {
					System.out.println("getExceptionT:"+e.getMessage());
					e.printStackTrace();
				}
                pu.returnDomain(dom);
                System.out.println(Thread.currentThread().getName()+":return domain:"+dom);
			}
		};
		Thread t2 = new Thread(){ 。。。。。。。。。

  

猜你喜欢

转载自www.cnblogs.com/xingminghui111/p/12390963.html