WEB开发网
开发学院软件开发Java Java 多线程同步问题的探究(四、协作,互斥下的协... 阅读

Java 多线程同步问题的探究(四、协作,互斥下的协作——Java多线程协作(wait、notify、notifyAll))

 2010-05-14 00:00:00 来源:WEB开发网   
核心提示: 但是,运行这个程序,Java 多线程同步问题的探究(四、协作,互斥下的协作——Java多线程协作(wait、notify、notifyAll))(3),我们发现事与愿违,那个非法监视器异常又出现了,我们不妨将flag封装到JavaBean或者数组中去,这样用JavaBean对象或者数组对象进行同

但是,运行这个程序,我们发现事与愿违。那个非法监视器异常又出现了。。。

我们注意到,针对flag的同步块中,我们实际上已经更改了flag对对象的引用: flag="false";

显然,这样一来,同步块也无能为力了,因为我们根本不是针对唯一的一个对象在进行同步。

我们不妨将flag封装到JavaBean或者数组中去,这样用JavaBean对象或者数组对象进行同步,就可以达到既能修改里面参数又不耽误同步的目的。

1. private   String flag[] = {"true"}; 

   1.         synchronized (flag) { 
   2.             flag[0] = "false"; 
   3.             flag.notify(); 
   4.         }  

   1.                  synchronized (flag) { 
   2.                 flag[0] = "false"; 
   3.                 flag.notify(); 
   4.             }synchronized (flag) { 
   5.                 while (flag[0]!="false") { 
   6.                     System.out.println(getName() + " begin waiting!"); 
   7.                     long waitTime = System.currentTimeMillis(); 
   8.                     try { 
   9.                         flag.wait(); 
  10.                          
  11.                     } catch (InterruptedException e) { 
  12.                         e.printStackTrace(); 
  13.                     }  

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Java 线程 同步

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接