스레드 동기화 및 통신 메커니즘
스레드 동기화는 다중 스레드가 경쟁 자원에 안전하게 접근하는 것을 확보하는 수단이다
스레드 간 통신
스레드 간에 왕왕 조율이 필요하고, 공동으로 어떤 업무를 완전하게 하며, 스레드 간의 상호 통신을 필요로 하며, 서로 다른 스레드 간의 상태를 통제해야 한다.
라인 동기화 및 통신 방식은 여러 가지가 있는데 본고는 흔히 볼 수 있는 두 가지 방식을 총괄하고자 한다.
private Runnable A = new Runnable() {
public void run() {
synchronized (lock) {
while (countA > 0) {
System.out.println("A");
countA --;
lock.notify();
try {
lock.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
lock.notify();
}
}
};
private Runnable B = new Runnable() {
public void run() {
synchronized (lock) {
while (countB > 0) {
System.out.println("B");
countB --;
lock.notify();
try {
lock.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
Lock lock2 = new ReentrantLock();
Condition conditionC = lock2.newCondition();
Condition conditionD = lock2.newCondition();
private Runnable C = new Runnable() {
public void run() {
while (countC > 0) {
lock2.lock();
try{
System.out.println("C");
countC --;
try {
conditionD.signal();
conditionC.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}finally{
lock2.unlock();
}
}
lock2.lock();
conditionD.signal();
lock2.unlock();
}
};
private Runnable D = new Runnable() {
public void run() {
while (countD > 0) {
lock2.lock();
try{
System.out.println("D");
countD --;
try {
conditionC.signal();
conditionD.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}finally{
lock2.unlock();
}
}
}
};
기타 스레드 동기화 방법
스레드 동기화만 실현하는 데는 아직도 많은 방식이 있는데, 여기서 더 이상 자세하지 않고, 단지 간단하게 기록할 뿐이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.