java中针对同一变量的不同函数的互斥操作
3243 点击·0 回帖
![]() | ![]() | |
![]() | 问题:某几个函数的执行都会修改某个变量值,而且这几个函数在不同的线程中被调用,如何保证在多线程程序中,变量值是可预测的 解决方法:对该变量进行加锁 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 摘自 片片云飘过 | |
![]() | ![]() |