【问题标题】:Java - trying to pause a thread [duplicate]Java - 试图暂停线程[重复]
【发布时间】:2012-07-26 23:21:02
【问题描述】:

可能重复:
Java Wait and Notify: IllegalMonitorStateException

有什么问题

    private final Object lock; 
public synchronized void run() {
    while (numItersCompleted < maxNumIters) {
        while (guiState == GuiState.PAUSED) {
            try {
                lock.wait(); // problematic line

投掷:

java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)

【问题讨论】:

  • 这是一个重复的问题。除非您在对象上的 synchronized(lock) 块中,否则您不能在对象上使用 wait() 或 notify()。
  • 您在 this 上同步,但您在 lock 上等待。

标签: java multithreading synchronization


【解决方案1】:

你没有在锁附近synchronized。

public void run() {
    while (numItersCompleted < maxNumIters) {
        while (guiState == GuiState.PAUSED) {
            try {
                synchronized (lock) {
                    lock.wait(); // problematic line
                }

我打算添加一个链接,但加里和我打赌

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多