Thread.sleep 을 취소하기

wait와 notify메소드를 이용하는 방법 [crayon] private void cancel() { synchronized(this){ isCancel = true; this.notify(); } } @Override public void run() { try { synchronized(this){ this.wait(delay); if (isCancel){ return; } } this.runnable.run(); } catch (Exception e) { } } } [/crayon]

sleep와 interrupt메소드를 이용하는 방법

[crayon] private void cancel() { isCancel = true; interrupt(); } @Override public void run() { try { Thread.sleep(delay); } catch (Exception e){} if (!isCancel){ this.runnable.run(); } } [/crayon] 나의 경우는 sleep 메소드를 사용하고 있긴한데 Runnable 인터페이스를 이용한 스레드라서 interrupt 메소드를 참조할 수 없다. 그럴때는 run() 메소드내에서 Thread.currentThread() 를 이용해 자기 자신을 글로벌 변수에 넣어두고 interrupt메소드를 호출하면 된다.

Runnable구현시의 interrupt메소드 이용하기

[crayon] class MyRunnable implements Runnable { private Thread thisThread; public void run() { thisThread = Thread.currentThread(); try { // do some work } catch(Throwable t) { t.printStackTrace(); // or log the error. } } public void interrupt() { thisThread.interrupt(); } } [/crayon] 참고사이트 http://www.telejapan.com/af/wiki/wiki.cgi?page=java+%A4%C7Thread%A4%CE%A5%B9%A5%EA%A1%BC%A5%D7%A4%C8%C9%FC%B5%A2%A4%CE%CA%FD%CB%A1 http://stackoverflow.com/questions/2979055/arrayblockingqueue-how-to-interrupt-a-thread-that-is-wating-on-take-metho]]>

Related Posts