现在有一个程序,使用了vector存储一些信息,然后主程序中重复调用同一个方法,每一次调用都会启动一个线程,这几个线程同时对vector操作。ArrayListlistTicket=newArray...
现在有一个程序,使用了vector存储一些信息,然后主程序中重复调用同一个方法,每一次调用都会启动一个线程,这几个线程同时对vector操作。
ArrayList listTicket = new ArrayList();
Vector vector = new Vector();
for(int i = 0;i<120;i++)
{
TicketBean ticketBean = new TicketBean("西安","郑州",1,i+1);
vector.add(ticketBean);
}
sale(vector,1,"一");
sale(vector,1,"二");
}
private static void sale(Vector vector,int num,String window)//接收参数符合要求的票组,购票数量和售票窗口
{
SaleTicketThread stt = new SaleTicketThread(vector,num);
Thread t = new Thread(stt,window);
t.start();
}
public class SaleTicketThread implements Runnable{
private Vector vector;//一组票
private int num;//数量
public SaleTicketThread(Vector vector,int num)
{
this.vector = vector;
this.num = num;
}
public void run()
{
for(int i = 0;i
{
TicketBean tb = vector.get(i);
vector.remove(i);
System.out.println(Thread.currentThread().getName()+"售出的是从"+tb.getSrc()+"到"+tb.getDest()+"的"+tb.getBox()+"车厢"+tb.getSeat()+"号座位。");
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Vector getVector() {
return vector;
}
public void setVector(Vector vector) {
this.vector = vector;
}
}
上述程序中如果在run方法中加入sleep,则两个线程就会同时售出1车厢1号票。
vector不是线程安全的吗?如果要解决这个同步问题应该如何做?
展开