Java를 배우고 있지만 동기화 문제가 있습니다. 나는 많은 자바 스레드에서 숫자의 인쇄 목록을 원하는 각 스레드 order.I에 갈 때 내가 많이 이해하지 않기 때문에 동기화를 사용하여 문제가 생겼어. 이해하는데 도움이 될 수 있습니까?Java 기본 동기화 스레드
1-thread1
2-thread2
3-thread1
4-thread2
5-thread1
6-thread2
...
48-thread2
49-thread1
내 고장 코드 :
첫째public class ManyThreadsAdd {
public static int index = 0;
public static void main(String[] args) {
ManyThreadsAdd myClass = new ManyThreadsAdd();
Thread thread1 = new Thread(myClass.new RunnableClass());
Thread thread2 = new Thread(myClass.new RunnableClass());
thread1.start();
thread2.start();
}
class RunnableClass implements Runnable {
public synchronized void run() {
while (index < 49) {
try {
Thread.sleep(100);
System.out.println(index+"-" +Thread.currentThread());
index = index + 1;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
당신은()'여기'대기()'사용'통보해야합니다. 당신은 당신의 출력을 달성하기 위해 스레드 사이에 일종의 의사 소통이 필요합니다. – TheLostMind
예 기다려보십시오.하지만 항상 잘못된 예외가 발생했습니다. 대기 클래스를 사용하여 알리는 공통 클래스일까요? – JoeJoeJoeJoe4
공유 잠금을 사용해야합니다. http://stackoverflow.com/q/6017281/217324에 대한 답변을 참조하십시오. 같은 문제이기 때문에이 속임수로 닫는 투표. 나는 당신을 위해 좋은 하나를 고르려고했지만,이 질문을 해결하지 않으면 "자바 멀티 스레딩 홀수 사이트 : stackoverflow.com"에 대한 답변을,이 문제에 게시 된 질문이 많이 있습니다. –