假如用一个vector存放一个数据表,这份表程序里只能有一份,而多个线程都要访问这个vector,该怎么定义阿? 谢谢!
感谢hjgundam的提示..
synchronized这种使用方法确实是错误的.BS一下自己.
差点就要误人子弟了. :oops:
上面的声明应该是这个样子的.
public class DataAdapter{
private static Vector data=new Vector();
public static synchronized Vector getData(){
return data;
}
}
在提取数据时.使用getData()这个方法.
同样.由于Vector是线程安全的,所以这个方法中的synchronized可以忽略不写,但如果存储值的对象是其它非线程安全的类.synchronized就要加上了.
声明方式如下:
[code="java"]public static synchronized Vector data=new Vector();[/code]
public 表明任何地方都可以使用Vector这个属性.它是公有的.
static 表明只有在类第一次实例化时,会初始化data的值,之后,所有地方都共享这一个属性,再次调用不会新生成一个对象.
synchronized 表明每次只能有一个线程对Vector进行访问.不会出现多个线程对data同时进行操作的现象.
不过由于Vector本身就是线程安全的,所以synchronized这个修饰符可以忽略不写.但如果是用的ArrayList之类的非线程安全的类,那么就一定要加上synchronized修饰.
[quote][code="java"]public static synchronized Vector data=new Vector(); [/code][/quote]
synchronized可以用来这样修饰变量?
如果想把ArrayList变成线程同步,自然有Collections.SynchronizedCollection()等一系列方法。也可以自己用synchronized来实现同步,当然也可以用JDK5的concurrent包中api来处理。
但是这里Vector本身就是线程安全的Collection