"Java에서 스레드 죽이는 방법"항목을 많이 읽고 스레드를 계속 실행해야하는지 여부를 나타 내기 위해 부울 가변 변수를 사용하는 방법을 발견했지만이 변수를 사용하는 방법을 설명한 대답을 아직 보지 못했습니다. 제대로 지금 내 이해를 바탕으로 두 클래스 (기본 및 실행 가능한)스레드를 죽이는 용도로 volatile을 올바르게 사용하는 방법은 무엇입니까?
에 나는 그런 식으로 할 것 :
public class Server {
private volatile boolean isRunning = true;
public Server(...) { }
public static void main(...)
...
new Thread(new Process(isRunning)).start();
...
}
public void shutdown() {
isRunning = false;
}
}
public class Process implements Runnable {
private volatile boolean isServerRunning;
public Process(boolean isServerRunning) {
this.isServerRunning = isServerRunning;
}
@Override
public void run() {
...
while(isServerRunning) {...}
...
}
}
내 질문 : 나는에 isRunning
변수를 제공해야 스레드의 Runnable를로 내가하는 것처럼 논쟁? 또한 Runnable 클래스 안에서이 변수를 휘발성 변수로 정의해야합니까? 코드를 개선하기 위해 수정할 사항이 있습니까?
전체 '서버'를 Runnable에 제공하는 것이 좋은 습관입니까? 자원 낭비가 조금 낭비되지 않습니까? (내가 수백 또는 수천 개의 '프로세스'가 실행되고 있다고 가정 해 봅니다.)'프로세스 '내부에서 다른 스레드를 시작한다면, 그 스레드에 대해해야 할 일과 똑같은 일을해야합니까? 새 스레드 (새 프로세스 (this)). start();'? – tom
@tom 예, 서버에 대한 참조를 항상 생성 한 모든 실행 파일에 전달해야합니다. 리소스 낭비와 관련해서는 이것이 미세 최적화이며 필요시에만 수행해야합니다. –