Java에서 thread.stop()이 사용되지 않으므로 블로킹 대기를 처리하지 않는 적절한 방법은 무엇입니까?차단 대기중인 스레드를 중지하는 방법은 무엇입니까?
new Thread(){
@Override
public void run(){
while(accept){
try {
/* attempt to read a single message */
ObjectInputStream is = new ObjectInputStream(s.getInputStream());
Message m = (Message) is.readObject();
/* delegate message to appropriate handler */
MessageDelegator.getInstance().delegate(m);
} catch (IOException | ClassNotFoundException ex) {
}
}
}
}.start();
그러나, 여기 청취 과정이 차단되기 때문에 accept=false;
을 설정하는 고전적인 트릭하지 않습니다 : 많은 클라이언트와 서버 - 클라이언트 모델을 실행할 때
예를 들어, 같은 내 서버 코드가 보일 수 있습니다 여기에서 일하십시오 (클라이언트는 영원히 아무 것도 보내지 않아서 끊임없이 교수형에 처하게됩니다). thread.stop()
을 더 이상 사용할 수 없으면이 스레드를 어떻게 죽일 수 있습니까?
스트림/소켓을 닫습니다. –
스트림을 어떻게 닫아야합니까? 다른 thread로부터 ObjectInputStream에 액세스 가능하게 할까, threadToKill.is = null; 또는 무엇인가를 실시합니까? 아마 너의 제안을 오해하고있을거야. – user1111929
아니요 null에 대한 참조를 설정해도 스트림이 닫히지 않습니다. http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#close%28%29 및 http://docs.oracle.com/javase/7/docs/api를 참조하십시오. /java/net/Socket.html#close%28%29. –