synchronized关键字修饰一个方法,可以保证多线程状态下,该方法的调用对象是同步变化的。如下例所示:两个线程同时调用vector的remove方法对vector变量进行操作,vector的长度是连续变化的。(Vector是线程安全的,Vector类中的方法都被synchronized修饰,当然包括remove()方法)
public class _Main {
private static Vector<Integer> vector = new Vector<Integer>();
public static void main(String[] args) {
while (true) {
for (int i = 0; i < 10; i++) {
vector.add(i);
System.out.println("加入的值:" + vector.get(i));
}
Thread remove1Thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
vector.remove(i);
System.out.println("Thread1:" + vector.size());
}
}
});
Thread remove2Thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
vector.remove(i);
System.out.println("Thread2: " + vector.size());
}
}
});
remove1Thread.start();
remove2Thread.start();
while(Thread.activeCount() > 20);
}
}
/**执行后部分结果
* Thread1:96
Thread1:95
Thread1:94
Thread1:93
Thread1:92
Thread1:91
Thread1:90
Thread2: 89
Thread2: 88
Thread2: 87
Thread2: 86
Thread2: 85
Thread2: 84
Thread2: 83
Thread2: 82
Thread2: 81
Thread2: 80
Thread1:79
Thread1:78
*/
}