자바 의 Thread 동기 코드 블록 synchronized(){}while 와 for 등 순환 에 넣 으 면 바깥 과 차이 가 있 습 니 다.
public class TestThread extends Thread{
private Integer ticketNum = 10;
public void run() {
synchronized (this) {// while
while(true) {
if(this.ticketNum > 0) {
try {
System.out.println(Thread.currentThread().getName()+":"+this.ticketNum);
this.ticketNum --;
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
break;
}
}
}
}
public static void main(String[] args) {
TestThread t = new TestThread();
new Thread(t, "t1").start();
new Thread(t, "t2").start();
}
}
※Runnable 구현 클래스 를 사용 하고 Thread thread=new Thread(Runnable 구현 클래스 대상)방법 으로 스 레 드 를 정의 하 는 것 을 추천 합 니 다.
우리 가 여러 개의 스 레 드 를 정의 할 때 다 중 스 레 드 가 같은 자원 에 대한 방문 과 작업 충돌 문 제 를 해결 하지만 매번 수출 의 결 과 는 같은 스 레 드 가 실행 되 고 있 음 을 발견 할 수 있 습 니 다.근원 을 추적 하면 동기 화 원 리 를 말 해 야 합 니 다.
synchronized 동기 코드 블록 을 예 로 들 면 동기 화 는 다 중 스 레 드 가 공동으로 작 동 할 부분 을 표시 하고 하나의 메 시 지 를 만 드 는 것 입 니 다.여러 스 레 드 가 동기 화 코드 블록 으로 표 시 된 위치 에 실 행 될 때 여러 스 레 드 간 에 메 시 지 를 쟁탈 합 니 다.증표 가 하나 밖 에 없 기 때문에 증표 의 한 스 레 드 는 동기 코드 블록 에 있 는 코드 를 실행 할 수 있 는 권한 을 얻 을 수 있 습 니 다.코드 블록 에 있 는 코드 를 실행 한 후에 증표 물 을 이 동기 코드 블록 에 돌려 주 고 다음 에 이곳 에 실 행 될 때 다른 스 레 드 와 경쟁 하여 누가 증표 를 받 을 수 있 는 지 보고 계속 반복 합 니 다.
이상 은 본인 이 동기 코드 블록 에 대한 조작 입 니 다.그러나 상기 내용 에 따 르 면 우 리 는 하나의 스 레 드 가 코드 블록 에 있 는 코드 를 실행 한 후에 야 우편물 을 돌려 줄 수 있다 는 것 을 알 게 될 것 입 니 다.즉,코드 블록 에 for 순환 이 있 으 면 코드 블록 을 실행 하고 있 는 스 레 드 는 for 순환 이 끝 난 후에 야 메 시 지 를 돌려 주 므 로 처음에 말 한 상황 을 초래 할 수 있 습 니 다.따라서 동기 화 메커니즘 을 사용 할 때 순환 구조 가 있 는 위 치 를 분명히 가 려 야 한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
while 순환 특수 용법while 순환 에 서 는 break, contine 순환 제어 문 구 를 자주 사용 합 니 다.다음은 contine 과 break 의 용법 을 소개 합 니 다. contine: 다음 순환 에 미리 들 어 갑 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.