如上,我想让一个正在执行的线程停下来,就调用了 thread.wait 方法,但是显示如上的错误,不知道错误原因,顺便问下使线程停止运行并且还可以重启应该采用什么方法?

解决方案 »

  1.   

    方法前要加synchronized锁定,即是必须先加锁,然后再调用wait(),notify()方法。必须的,,,,
      

  2.   

    按你这个问题是这样的但是 wait  notify 用于同步操作,典型的同步原语啊。 让它中断线程用 interrupt(),或者可以让他睡眠 sleep
     
      

  3.   

    主要是 Sleep 之后还会占用 CPU 资源,而貌似等待就不会
      

  4.   

    对 要想用wait方法必须先加同步锁
      

  5.   

    楼主对Object.wait方法理解错了吧。wait不是针对线程Thread/Runnable的,而是针对锁对象的假设某个Object lock = new Object();
    线程1(比如消费者线程)调用lock.wait()方法后,线程1就停下,直到其他某个线程(比如生产者线程)调用了lock.notify()或者lock.notifyAll();唤醒一个或者多个等待lock被唤醒的线程(此例中的线程1)。
    调用wait之前,需要对lock同步synchronized (lock) {...}如果只是想让当前线程停下一段时间
    Thread.sleep(毫秒数)
      

  6.   

    楼上正解,应该调用lock对象的wait方法:lock.wait()而不是线程的wait方法
    如果没有在同步块中调用wait,会报IllegalMonitorStateException,而楼主报的不是这个异常。
    线程中止并重启,这个...线程中止可以让标记线程的变量置为false,从外部调用方法中止线程,重启嘛,你重新执行一下run方法中的代码不就好了。
      

  7.   

    可以试试看
    syncronized(this) { //把wait代码放在synchronized块中,锁线程自己
        wait(1000); //锁一定的时间,要不然没有notify就一直wait了
    }