그래서 저는 멀티 스레딩에 대해 머리를 감싸고 있고 아주 기본적인 프로그램을 만들었습니다. 아이디어는 단순히 몇 개의 스레드를 시작하고 각 스레드는 0으로 경쟁 (감소)하여 1이 승자로 선언되고 다른 스레드가 즉시 중지됩니다. 나는 다른 스레드를 종료하는 부울 플래그를 사용했지만 때로는 약간의 시간 동안 계속됩니다 (실행이 여전히 참인지 확인하기 위해 while 루프에서 검사를 수행 할 때까지 추측합니다).
나는 인터럽트를 시도했지만 내 이해는 이것들이 잠자고 대기중인 스레드에서만 작동하고 전체 시간 동안 거의 사용하고있는 스레드에서만 작동한다는 것입니다. 나는 system.exit (1)을 사용했지만 적어도 즉시는 아니지만 이것도 그들을 멈추지 않습니다. 경험이 많은 사람들이 무엇을할지 궁금하십니까? 기본적으로 저는 "모두 지금 지금하고있는 일을 중지하십시오"라고 말하는 스레드를 원합니다.
다음은 코드입니다.
실행 가능 클래스
public class ThreadRunnable implements Runnable {
private static boolean run;
private int tick;
public ThreadRunnable() {
run = true;
tick = 5;
}
public void run() {
Thread t = Thread.currentThread();
while (run) {
tickDeduction();
if (tick == 0) {
System.out.println("Thread " + (Thread.currentThread().getId()) + " WINS");
this.run = false;
return;
}
}
}
public synchronized void tickDeduction() {
System.out.println("Thread " + (Thread.currentThread().getId()) + " is at tick " + this.tick);
this.tick--;
}
}
메인 클래스
public static void main(String[] args) {
ThreadRunnable runnableBlue = new ThreadRunnable();
ThreadRunnable runnableRed = new ThreadRunnable();
Thread teamBlue = new Thread(runnableBlue);
Thread teamRed = new Thread(runnableRed);
teamBlue.start();
teamRed.start();
}
기본적으로 저는 "모두 지금 지금하고있는 일을 중지하십시오"라고 말하는 스레드를 원합니다.
Java 애플리케이션이 자체적으로이를 수행 할 수있는 방법은 없습니다. 디버거는 그것을 할 수 있습니다. (확실히 JDWP 프로토콜에는 대상 JVM의 모든 스레드를 고정하는 명령이 있습니다 ...)
Java 애플리케이션 내에서 얻을 수있는 가장 가까운 Thread.suspend()
방법 은 ThreadGroups 및 Threads 트리를 탐색하고 더 이상 사용되지 않는 메서드를 각 스레드에 적용하는 것 입니다. (현재 스레드를 일시 중지하지 않도록주의하십시오 ...) 그러나 suspend 메소드는 위험하며 (javadocs 참조) 순회에서 모든 스레드를 볼 것이라는 보장은 없습니다. 물론이 (가설적인) 절차는 즉각적인 것이 아닙니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다