Vector<String> v = new Vector<String>() ;
Hashtable<String, String> hm = new Hashtable<String,String>() ;
List<String> array = new ArrayList(); //线程不安全的类
//public static <T> List<T> synchronizedList(List<T> list)
//返回指定列表支持的同步(线程安全的)列表
List list = Collections.synchronizedList(array) ; //线程安全的方法
1)同步方法是用synchronized来修饰方法名;比如:private synchronized static void method(){
}
2)同步代码块是引入了监视器,线程开始执行同步代码块之前,必须先获得对同步监视器的锁定。例如:
synchronized(lock){
}
lock就是同步监视器,只有先获得同步监视器的锁定,线程才能执行synchronized代码块。需要注意的是:在使用时,监视器不能写下run()方法里面,必须写下run()外来使用才能保证其作用。
3) 同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁,很明显,同步方法锁的范围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好。
4)一般在需要时使用同步代码块的方式来保证线程安全,因为使用同步代码块比使用同步方法的性能更佳!