问题:某几个函数的执行都会修改某个变量值,而且这几个函数在不同的线程中被调用,如何保证在多线程程序中,变量值是可预测的
解决方法:对该变量进行加锁
import
java.util.Vector;
public class bingfa{
private static Vector<Integer> vector = new Vector<Integer>();
public void addInteger(){
//使用变量锁,确保不同函数对该变量的操作是互斥的
synchronized (vector) {
for(int i = 0; i<5;i++){
System.out.println("ADD "+ i);
vector.add(i);
}
}
}
public void getInteger(){
//使用变量锁,确保不同函数对该变量的操作是互斥的
synchronized (vector) {
while(vector.size()!=0){
System.out.println("GET "+vector.get(0));
vector.remove(0);
}
}
}
public static void main(String[] args) {
final bingfa myt2 = new bingfa();
Thread t1 = new Thread( new Runnable() { public void run() { myt2.addInteger(); } }, "t1" );
Thread t2 = new Thread( new Runnable() { public void run() { myt2.getInteger(); } }, "t2" );
t1.start();
t2.start();
}
}
运行结果:
ADD 0
ADD 1
ADD 2
ADD 3
ADD 4
GET 0
GET 1
GET 2
GET 3
GET 4
摘自 片片云飘过