자바 스레드 풀은 짝수를 인쇄 기반을 달성하기 위해

수입 java.util.concurrent.ExecutorService; 
수입 java.util.concurrent.Executors;
수입 java.util.concurrent.atomic.AtomicInteger;

공용 클래스 StrangePrinter {

개인 INT 최대;
개인 AtomicInteger 상태 = 새로운 AtomicInteger (1); // AtomicInteger保证可见性,也可以휘발성用

공개 StrangePrinter (INT 최대) {
this.max = 최대;
}

공공 정적 무효 메인 (문자열 []에 args) {
StrangePrinter strangePrinter = 새로운 StrangePrinter (100);
ExecutorService를 ExecutorService를 Executors.newFixedThreadPool = (2);
executorService.submit (strangePrinter.new MyPrinter ( "PRINT1", 0));
executorService.submit (strangePrinter.new MyPrinter ( "Print2", 1));
executorService.shutdown ();
}

클래스 MyPrinter 구현 실행 가능한 {
개인 문자열 이름;
개인 INT 타입; // 인쇄 유형, 0 : 홀수 대표 인쇄, 1 : 대표 인쇄 짝수

공공 MyPrinter (문자열 이름, INT 타입) {
this.name 이름 =;
this.type = 입력]
}

@Override
공개 무효 RUN () {
IF (. 타입 == 1) {
while 회 (status.get () <= 최대) {
동기 (StrangePrinter.class) {// 잠금 다음 동작은 원자 동작을 보장하는 것이다
// 인쇄에도
경우 (status.get () <= 최대 && status.get () % 2 == 0) {// 에도 프린트
에서 System.out.println (이름 + "-"+ status.getAndIncrement ());
}
}
}
} 또 {
동안 (status.get () <= 최대) {
동기 (StrangePrinter.class) {//加锁
//打印奇数
경우 (status.get () <= 최대 && status.get () % ! 2 = 0) {//打印奇数
에서 System.out.println (이름 + "-"+ status.getAndIncrement ());
}
}
}
}
}
}
}

추천

출처www.cnblogs.com/tangsonghuai/p/10942281.html