Rumah > Soal Jawab > teks badan
迷茫2017-04-18 10:39:15
Rujuk soalan StackOverflow:
http://stackoverflow.com/ques...
Walau bagaimanapun, saya masih mempunyai banyak perkara untuk diperkatakan, jadi sila berikan saya nasihat dan perbincangan anda!
Jalankan program ujian berikut, keputusan akhir bukan 20000, hasilnya ditimpa berkali-kali di tengah.
public class Test {
private static int staticVariableOne = 0;
public Test() {
super();
}
public static int getStaticVariableOne() {
return staticVariableOne;
}
public static void setStaticVariableOne(int staticVariableOne) {
Test.staticVariableOne = staticVariableOne;
}
private static void increaseStaticVariableOne() {
staticVariableOne++;
}
public synchronized void add() {
System.out.println("执行 add() 开始...");
try {
for (int i = 0; i < 10000; i++) {
increaseStaticVariableOne();
Thread.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行 add() 完毕...");
}
public synchronized static void addStatic() {
System.out.println("执行 addStatic() 开始...");
try {
for (int i = 0; i < 10000; i++) {
increaseStaticVariableOne();
Thread.sleep(2);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行 addStatic() 完毕...");
}
}
public class StudyMain {
public static void main( String[] args ) {
final Test insertData = new Test();
Thread threadOne = new Thread() {
@Override
public void run() {
insertData.add();
}
};
Thread threadTwo = new Thread() {
@Override
public void run() {
Test.addStatic();
}
};
threadOne.start();
threadTwo.start();
try {
threadOne.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
threadTwo.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("After 20000 times increasements, final staticVariableOne is "
+ Test.getStaticVariableOne());
}
}