本帖最后由 ZhaoYuBetter 于 2013-5-17 13:12 编辑
如题,如果一个方法 是 sync 的, 里面 有 this.wait(). 当程序执行到 this.wait()时,是不是 this 锁就放弃了?其他线程可以进来了
public class StopThreadDemo2 { publicstatic void main(String[] args) { StopThread2st = new StopThread2(); Threadt1 = new Thread(st); Threadt2 = new Thread(st); t1.start(); t2.start();
intnum = 0; while(true) { if(num++ == 60) { st.changeFlag(); t1.interrupt(); // 强制恢复冻结线程 t2.interrupt(); // 强制恢复冻结线程 break; } System.out.println(Thread.currentThread().getName()+ "..." + num); } System.out.println("over"); } }
class StopThread2 implements Runnable { privateboolean flag = true;
@Override publicsynchronized void run() { while(flag) { try{ this.wait(); // 等待,这里如果某个线程 wait了。是不是应该放弃了 this 锁了。其他线程可以进来了。有点疑惑 }catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+"Exception"); flag= false; // 操作标记让线程结束 } System.out.println(Thread.currentThread().getName()+ "...... run "); } }
publicvoid changeFlag() { flag= false; } } |