簡體   English   中英

進入睡眠狀態后,線程恢復錯誤

[英]Error in Thread Resuming after it is put to sleep

您好,我在恢復我的代碼的線程時遇到問題

 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;
}

我可能會向您解釋它是如何工作的,因為它將幫助您確定問題。 首先,線程進入睡眠狀態……然后,我從另一個名為ReplyYes函數調用此public boolean Wait()函數,該函數傳遞值“ Y”,然后嘗試恢復線程,但嘗試t.resume()函數調用,而不是恢復線程,給了我一個Java.Lang.Null.PointerException並且該線程沒有恢復,導致返回了FALSE值。 另外由於這個線程,我什至無法停止我的服務,我不得不等待線程超時。

誰能解釋一下如何使其正常工作! 謝謝

我認為您誤解了Thread.sleep工作原理。 這是一種靜態方法。

t.sleep(100000); 使當前線程進入睡眠狀態,而不使線程t進入睡眠狀態。

文檔中

使當前正在執行的線程進入休眠狀態(暫時停止執行)指定的毫秒數

強調我的。

您應該啟動線程並從該線程調用sleep。 有關啟動線程的兩種不同方式,請參見以下文章:

此外, resume僅與suspend一起使用,並且都已棄用。 從文檔中:

不推薦使用。 此方法僅可與suspend() ,該方法已被棄用,因為它容易死鎖。 有關更多信息,請參見為什么不贊成使用Thread.stop,Thread.suspend,Thread.resume和Runtime.runFinalizersOnExit?

出現NullPointerException的原因可能是因為您嘗試調用t.resume() 之后創建新的Thread對象。 因此,此時t仍為null 基本上,您的代碼需要完全從頭開始重寫。 我建議遵循上面鏈接的教程,一旦您了解如何創建線程,請轉到下一章:

首先,您必須啟動新線程: t.start(); 然后嘗試喚醒您的線程: t.interrupt();

run()方法中調用Thread.sleep() ,這會導致休眠線程調用此方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM