다중 스레드를 사용하여 개체 풀링

 

공용 클래스 PoolUtils { 

	개인 목록 <도메인> 목록; 
	
	공공 무효 INIT는 ()는 { 
		목록 <도메인> () = 새로운의 ArrayList를; 
		위한 (INT 난 = 0; I <3; I ++) { 
			에는 list.add (새로운 도메인 ()); 
		} 
	} 
	
	공개 도메인 동기화 getDomain () { 
		도메인 도메인 = NULL; 
		만약 (는 list.size ()> 0) { 
			도메인 list.remove = (0); 
			에서 System.out.println (.는 Thread.currentThread () getName () + "는 버려지 :"+는 list.size ()); 
		} 다른 { 
			{시도 
				에서 System.out.println (.는 Thread.currentThread () getName () + ": 전에 대기를"); 
				기다림(); 
				에서 System.out.println (는 Thread.currentThread () getName () + ": 후 대기."); 
			} 캐치 (예외 전자) {
				에서 System.out.println ( "getException :"+ e.getMessage ()); 
				e.printStackTrace (); 
			} 
			도메인)을 getDomain (=; 
		} 
		도메인을 반환; 
	} 
	
	공개 동기화 무효 returnDomain (도메인 영역) { 
		에는 list.add (도메인); 
		에서 System.out.println (.는 Thread.currentThread () getName () + "는 반환 왼쪽 :"+는 list.size ());		
		의 notifyAll (); 
// 알릴; 
	} 
}

  

공공 정적 무효 메인 (문자열 []에 args) { 
		최종 PoolUtils PU = 새로운 PoolUtils (); //单例
		
		pu.init (); 
		
		스레드 T1이 새로운 스레드 = () { 
			공공 무효 실행 () { 
				도메인 DOM = pu.getDomain (); 
				에서 System.out.println (.는 Thread.currentThread () getName () + ": GET 도메인 :"+ DOM); 
                {시도 
					는 Thread.currentThread ()를 절전 (3000).; 
				} 캐치 (예외 전자) { 
					에서 System.out.println ( "getExceptionT :"+ e.getMessage ()); 
					e.printStackTrace (); 
				} 
                pu.returnDomain (DOM); 
                에서 System.out.println (는 Thread.currentThread () getName () + ": 리턴 도메인 :"+ DOM.); 
			} 
		}; 
		스레드 T2 = 새로운 스레드 () {.........

  

 

추천

출처www.cnblogs.com/xingminghui111/p/12390963.html