以上面的为例,如果不是notifyAll(),而是notify(),
程序一开始,标记flag默认值为false,t1线程运行完毕之前,会通过"flag = true;"改变flag标记的值,改变后的值为true,
t1线程同过while(true)循环重新运行时,读到flag为true是,会执行while循环中的语句,读取wait(),t1线程进入冻结状态.
t2线程开运行,读到flag为true是,会执行while循环中的语句,读取wait(),t2线程进入冻结状态,
这个时候t3线程就会开始运行,同t1线程运行一样,t3第一次执行完毕前,会通过flag = false;改变flag标记,
使t3线程进入冻结状态,
进而使t4线程进入冻结状态,
这样程序就会出现t1,t2,t3,t4都处于冻结状态的状况.
|