자바 다 중 루틴 순서 인쇄 ABC
2971 단어 자바
그러나 이렇게 쓰 고 몇 번 순환 하면 몇 개의 스 레 드 를 만들어 야 하 는 지 성능 이 좋 지 않 습 니 다.
package com.thread.chapter1;
public class PrintABC {
Object lock = new Object();
boolean isA = true, // A, true
isB = false, isC = false;
public static void main(String[] args) throws InterruptedException {
PrintABC printABC = new PrintABC();
for (int i = 0; i < 10; i++) {
Thread threadA = new Thread(new Runnable() {
@Override
public void run() {
try {
printABC.printA(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadB = new Thread(new Runnable() {
@Override
public void run() {
try {
printABC.printB(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadC = new Thread(new Runnable() {
@Override
public void run() {
try {
printABC.printC(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
threadA.start();
Thread.sleep(100); // sleep 100, 10 ,
// , ( isA/isB/isC false)
threadB.start();
Thread.sleep(100);
threadC.start();
Thread.sleep(100);
}
System.out.println("main");
}
private void printA(String threadName) throws InterruptedException {
synchronized (lock) {
while (!isA) {
lock.wait(); //wait/notify synchronized
}
System.out.println("A:: "+threadName);
isA = false;
isB = true;
lock.notify();
}
}
private void printB(String threadName) throws InterruptedException {
synchronized (lock) {
while (!isB) {
lock.wait();
}
System.out.println("B:: "+threadName);
isB = false;
isC = true;
lock.notify();
}
}
private void printC(String threadName) throws InterruptedException {
synchronized (lock) {
while (!isC) {
lock.wait();
}
System.out.println("C:: "+threadName);
isC = false;
isA = true;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.