学习Java,使用同步关键字
所以我用关键字测试。以下是我尝试过的一个示例:synchronized
public class MyTest {
static int i = 0;
public static void main(String[] args) {
new Thread(t1).start();
new Thread(t2).start();
}
private static void countMe(String name){
i++;
System.out.println("Current Counter is: " + i + ", updated by: " + name);
}
private static Runnable t1 = new Runnable() {
public void run() {
try{
for(int i=0; i<5; i++){
countMe("t1");
}
} catch (Exception e){}
}
};
private static Runnable t2 = new Runnable() {
public void run() {
try{
for(int i=0; i<5; i++){
countMe("t2");
}
} catch (Exception e){}
}
};
}
当我运行它时,从两个线程调用方法的输出生成以下输出:countMe()
Current Counter is: 1
Current Counter is: 2
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 3
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10
当我将方法更改为:countMe()
private synchronized static void countMe(){
i++;
System.out.println("Current Counter is: " + i);
}
我得到这个输出:
Current Counter is: 1
Current Counter is: 2
Current Counter is: 3
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10
虽然这让我清楚地了解了目的,但我想知道是否还有其他原因,我们可以使用。或者我在这里所做的,是为什么我们需要使用这个关键字的唯一伊森?synchronized
synchronized
synchronized
谢谢。
编辑:我感到困惑的另一件事是,在第一个输出中,为什么计数器在7之后变为3。这对我来说似乎有点不可能,但每次我尝试时都会发生类似的结果,这正常吗?