2016-06-09 104 views
0

我在Java中有一個關於線程的問題,它帶有單線程及其關於停止線程並繼續。Java簡單線程和單線程IllegalMonitorStateException

我的代碼的作用:類MainWindow創建一個Threadreference並在endloop中啓動和停止它。

類MyThread啓動線程。 run方法是很短,它是所有做的事: 1.將鼠標移動到屏幕的左側 然後 2.將鼠標移動到屏幕

右側當我啓動程序我立即得到一個IllegalMonitorStateException並且不知道如何解決它。

public class MainWindow 
{ 
    public static void main(String[] args) throws Exception 
    { 
     MyThread mt = new MyThread(); 
     while(true) 
     { 
      mt.start(); 
      Thread.sleep(1000); 
      mt.wait(); 
     } 
    } 
} 

public class MyThread implements Runnable 
{ 
    private Thread th; 
    public MyThread() throws Exception 
    { 
     th = new Thread(); 
     th.start(); 
    } 
    public void start() throws InterruptedException 
    { 
     synchronized(this){ 
     th.wait(); 
     } 
    } 
    public void wait() 
    { 
     synchronized(this){ 
     th.notifyAll(); 
     } 
    } 
    @Override 
    public void run() 
    { 
     //do something 
    } 
} 

感謝您的幫助! :)

+1

你這樣做是錯的。你不能通過調用'Thread#wait()'方法來告訴線程等待。該方法做了完全不同的事情。 – zapl

+0

哦,好吧,我明白了,我想我明白了,它只是用於多線程。我用它,因爲我需要停止線程,但我讀過,如果線程是通過運行方法它死了,所以我無法阻止它...我必須重讀一些東西,然後再試一次 – SergSam

+0

是的,你必須閱讀一下:)你的run方法一點也不用,你需要將'Runnable'傳遞給它的構造函數的線程(例如'th = new Thread(this);'),代碼中的線程和運行方法不起作用。 – zapl

回答

0
while(true) 
     { 
      mt.start(); 
      Thread.sleep(1000); 
      mt.wait(); 
     } 

您不應使運行線程可運行。即)你不能啓動已經運行的線程。