小编Jac*_*opo的帖子

无限循环内的同步块

我有两个线程,比如T1T2,它们同时对同一个对象obj:

class T1 extends Thread {
  public void run() {
    while(true) {
      synchronized(obj) {
        while(condition) {
          ...do something...
          obj.wait();
        }
        ...do something else...
        obj.notify();
      }
    }
  }
}


class T2 extends Thread {
  public void run() {
    while(true) {
      synchronized(obj) {
        while(!condition) {
          ...do something...
          obj.wait();
        }
        ...do something else...
        obj.notify();
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,说T1首先获得锁定,进入while(condition)循环并暂停自己.另一方面,T2现在可以自由获取锁定:!condition未满足,因此它不会进入内部while循环,它会执行其他操作然后调用obj.notify().
我期待的是:T1唤醒,获取锁定等等,但我看到的大部分时间是T1无法获取锁定因此T2 …

java concurrency multithreading

3
推荐指数
1
解决办法
1000
查看次数

标签 统计

concurrency ×1

java ×1

multithreading ×1