공용 클래스 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 = 새로운 스레드 () {.........