当前位置: 技术问答>java相关
有关不同线程同时访问同一公共Vector变量的问题(欢迎讨论)
来源: 互联网 发布时间:2015-07-07
本文导语: 假设有一公共变量 public static Vector buffer=new Vector(10,2); 有两个线程getMsgFromBuffer,inputMsgToBuffer getMsgFromBuffer是从buffer中取一个数据buffer.get(0);然后删除已经取走的数据buffer.romove(0); inputMsgToBuffer是加一个数据到buffer,buf...
假设有一公共变量
public static Vector buffer=new Vector(10,2);
有两个线程getMsgFromBuffer,inputMsgToBuffer
getMsgFromBuffer是从buffer中取一个数据buffer.get(0);然后删除已经取走的数据buffer.romove(0);
inputMsgToBuffer是加一个数据到buffer,buffer.addElement(Object o)
我的问题是:
如果这两个线程同时对buffer进行操作时,会不会有问题?
public static Vector buffer=new Vector(10,2);
有两个线程getMsgFromBuffer,inputMsgToBuffer
getMsgFromBuffer是从buffer中取一个数据buffer.get(0);然后删除已经取走的数据buffer.romove(0);
inputMsgToBuffer是加一个数据到buffer,buffer.addElement(Object o)
我的问题是:
如果这两个线程同时对buffer进行操作时,会不会有问题?
|
没有问题,因为Vector本身已经是线程同步的了。也就是都是synchronzied的,所以在没有同步的情况下都用ArrayList,Vector的效率比较低(因为要同步)。
|
Vector是线程安全的,因为它是同步的。
|
不会有问题的.
Vector对象已经是线程同步的,在编程时不需要关心这个问题.
Vector对象已经是线程同步的,在编程时不需要关心这个问题.
|
我想Vector虽然是同步的,但它只是保证在你get的时候,不会做remove操作,但你自己的get(0)、remove(0)应该在一个同步方法内完成。