线程在进入休眠状态后恢复出错

时间:2012-06-16 09:49:55

标签: java

您好,我遇到了恢复线程的问题,我的代码是

 public boolean Wait(String Reply){     
        if (Reply.equalsIgnoreCase("Y")){
            try {
                t.resume();
            }
            catch (Exception e){
              System.out.println("\n" + "The exception in resume thread method:::: " + e);                
            }
            System.out.println("\n" + "In the Wait Function of Sender");
            return true;

        }
        JOptionPane.showMessageDialog(j ,
                    "Please Wait While The User Accpets the Trasmission ",
                    "",
                    JOptionPane.INFORMATION_MESSAGE);


       try{
         t = new Thread(this);
         t.sleep(100000);  
        }
       catch (InterruptedException ie){
         System.out.println(ie.getMessage());
       }
    return false;
}

我可能会解释它是如何工作的,因为它可以帮助你确定问题。  首先线程进入休眠状态......然后我从另一个名为public boolean Wait()的函数调用此ReplyYes函数,该函数传递值“Y”,然后我尝试恢复线程,但{ {1}}函数调用,而不是恢复线程给我一个t.resume()并且线程没有恢复,导致返回一个FALSE值。再加上因为这个线程我甚至无法停止我的服务我必须等待线程到timeOut。

任何人都可以解释如何让它正常工作! 谢谢

2 个答案:

答案 0 :(得分:3)

我认为你误解了Thread.sleep的工作原理。这是静态方法。

t.sleep(100000);当前线程置于休眠状态,而不是线程t

来自documentation

  

使当前正在执行的线程暂停(暂时停止执行)指定的毫秒数

强调我的。

你应该启动线程并从该线程调用sleep。有关启动线程的两种不同方法,请参阅以下文章:

此外,resume仅适用于suspend,并且已弃用。来自文档:

  

已弃用。此方法仅适用于suspend(),因为它容易出现死锁,因此已被弃用。有关详细信息,请参阅Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?

获得NullPointerException的原因可能是因为您尝试在调用t.resume()之后创建新的Thread对象。那么在那时,t仍然具有值null。基本上,您的代码需要从头开始重写。我建议按照我上面链接的教程,然后一旦你了解如何创建线程移动到下一章:

答案 1 :(得分:0)

首先你必须开始新的线程:t.start();然后尝试唤醒你的线程:t.interrupt();

Thread.sleep()方法中调用run(),这会导致调用此方法的睡眠线程