2014-02-10 154 views
1

我是Java中的多线程新手,所以对于这个问题012zz有没有什么办法唤醒睡眠线程,通过调用睡眠(超时)方法睡眠,并且在那之前超时到期?例如把他吵醒了一些事件使用睡眠方法唤醒Java中的线程

谢谢

我已经试过这个代码处理我的事件手动睡眠/唤醒线程,但它不工作:线程睡眠,但不能恢复

   try { 
      if(sleepMyThread){ 

      myThread.sleep(100000); 
      sleepMyThread = false; 
       } 
      else{ 
      myThread.interrupt(); 
      sleepMyThread = true; 
       } 
      } 
    catch (InterruptedException e) { 
      e.printStackTrace(); 
    } 
+0

这看起来类似于您的问题:http://stackoverflow.com/questions/8708473/waking-up-a-sleeping-thread-interrupt-versus-splitting-the-sleep -into-mult – BitNinja

+1

@codeNinja - 它的确如此,但是>>这个<<问题表达的问题没有OP的可疑代码和生活故事的两个屏幕截图:-) –

回答

2

仔细阅读sleep方法的文档。它明确指出 - 方法抛出InterruptedException。因此,您可以通过中断该线程来唤醒睡眠线程。但是,这不是将事件发送到线程的方式。对于发送事件(好的...不是基于事件的机制在核心Java中可用),您应该使用wait - notify机制。

+0

你的意思是调用方法中断从睡眠方法唤醒线程? – user3232174

+0

什么办法,我已经试过这种 – user3232174

+0

尝试{ \t \t \t \t \t如果(sleepMyThread){ \t \t \t \t \t \t \t \t \t \t \t \t \t myThread.sleep(100000); \t \t \t \t \t \t \t sleepMyThread = false; \t \t \t \t \t} \t \t \t \t \t其他{ \t \t \t \t \t \t MyThread的。打断(); \t \t \t \t \t \t sleepMyThread = true; \t \t \t \t} \t \t \t \t} \t \t \t \t赶上(InterruptedException的发送){ \t \t \t \t \t \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t} – user3232174

0

在您的线程中调用interrupt()方法。它会抛出一个InterruptedException所以确保你处理。