synchronized关键字的作用(四)

synchronized的作用(四)

注意:
1、用synchronized 来锁定一个对象的时候,如果这个对象在锁定代码段中被修改了,则这个锁也就消失了。看下面的实例:

目标类:

Java代码
  1. public class TestThread {   
  2.      private static final class TestThreadHolder {   
  3.             private static TestThread theSingleton = new TestThread();   
  4.             public static TestThread getSingleton() {   
  5.                 return theSingleton;   
  6.               }   
  7.             private TestThreadHolder() {   
  8.               }   
  9.           }   
  10.         
  11.     private Vector ve =null;   
  12.     private Object lock=new Object();   
  13.     private TestThread(){   
  14.           ve=new Vector();   
  15.           initialize();   
  16.       }   
  17.     public static TestThread getInstance(){   
  18.         return TestThreadHolder.getSingleton();   
  19.       }   
  20.     private void initialize(){   
  21.         for(int i=0;i<100;i++){   
  22.               ve.add(String.valueOf(i));   
  23.           }   
  24.       }   
  25.     public void reload(){   
  26.         <SPAN class=hilite1>synchronized</SPAN>(lock){   
  27.               ve=null;               
  28.               ve=new Vector();   
  29.                         //lock="abc";    
  30.             for(int i=0;i<100;i++){   
  31.                   ve.add(String.valueOf(i));   
  32.               }   
  33.           }   
  34.           System.out.println("reload end");   
  35.       }   
  36.        
  37.     public boolean checkValid(String str){   
  38.         <SPAN class=hilite1>synchronized</SPAN>(lock){   
  39.               System.out.println(ve.size());   
  40.             return ve.contains(str);   
  41.           }   
  42.       }   
  43. }  
说明:在reload和checkValid方法中都增加了synchronized关键字,对lock对象进行加锁。在不同线程中对同一个对象实例分别调用reload和checkValid方法。
在reload方法中,不修改lock对象即注释lock="abc"; ,结果在控制台输出reload end后才输出100。说明是同步调用的。
如果在reload方法中修改lock对象即去掉注释,结果首先输出了一个数字(当前ve的大小),然后输出reload end。说明是异步调用的。
posted @ 2008-07-02 16:39  supers  阅读(171)  评论(0)    收藏  举报