내 프로젝트에서 타사 라이브러리를 가져 왔고 지금은 Websphere에 게시합니다. ServletContextListener을 사용하여 내 애플리케이션의 모든 트레드를 지우고 Thread.stop() 메소드를 사용합니다. 이 응용 프로그램을 재배포, 나는 여전히 살아있는 오래된 스레드를 발견, 나는 인터넷에서 검색하고 소리내는 소리 회원 또는 인터럽트()와 함께 소리를 사용하지만 제 3 자 lib에 해킹하고 싶지 않아 그래서 누가 줄 수 있는지 나 힌트? 다음과 같은
감사합니다 :)
타사 LIB 코드 : 타사 라이브러리에서 가져온 스레드를 죽이는 방법은 무엇입니까?
public void run() {
while (true) {
try {
for (DefaultFuture future : FUTURES.values()) {
if (future == null || future.isDone()) {
continue;
}
if (System.currentTimeMillis() - future.getStartTimestamp() > future.getTimeout()) {
// create exception response.
Response timeoutResponse = new Response(future.getId());
// set timeout status.
timeoutResponse.setStatus(future.isSent() ? Response.SERVER_TIMEOUT : Response.CLIENT_TIMEOUT);
timeoutResponse.setErrorMessage(future.getTimeoutMessage(true));
// handle response.
DefaultFuture.received(future.getChannel(), timeoutResponse);
}
}
Thread.sleep(30);
} catch (Throwable e) {
logger.error("Exception when scan the timeout invocation of remoting.", e);
}
}
}
내 로컬 테스트 코드 :
public class Test {
public static void main(String[] args) throws InterruptedException, IOException {
myThread t1 = new myThread();
t1.start();
Thread.sleep(4000);
t1.stop();
System.in.read();
}
}
class myThread extends Thread{
@Override
public void run() {
int i=0;
while(true){
try {
System.out.println(i++);
Thread.sleep(30);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
}
무엇이 문제입니까? 이 스레드가 당신에게 어떤 문제가 있습니까? –
우리는 단지 응용 프로그램을 재배포 할 때마다 새로운 스레드가 생성 될 것이며, 일부 메모리 누수가 발생할 수 있다고 생각합니다. – taoeaten
어떻게이 Third Party 스레드를 시작 하시겠습니까? 그것이 Runnable을 구현하는 것처럼 보입니다. 하지만 직접 쓰레드 인스턴스를 생성하고 시작해야합니까? 아니면 제 3 자 API가 그렇게합니까? – shazin