Tôi đang tự hỏi về kết quả của decrementing không an toàn/incrementing trong chủ đề java, do đó chương trình của tôi:Chủ đề giảm/giảm không an toàn - tại sao chủ yếu là tích cực?
lớp chính:
public class Start {
public static void main(String[] args) {
int count = 10000000, pos = 0, neg = 0, zero = 0;
for (int x=0; x<10000; x++) {
Magic.counter = 0;
Thread dec = new Thread(new Magic(false, count));
Thread inc = new Thread(new Magic(true, count));
dec.start();
inc.start();
try {
inc.join();
dec.join();
} catch (InterruptedException e) {
System.out.println("Error");
}
if (Magic.counter == 0)
zero++;
else if (Magic.counter > 0)
pos++;
else
neg++;
}
System.out.println(Integer.toString(neg) + "\t\t\t" + Integer.toString(pos) + "\t\t\t" + Integer.toString(zero));
}
}
Chủ đề lớp:
public class Magic implements Runnable {
public static int counter = 0;
private boolean inc;
private int countTo;
public Magic(boolean inc, int countTo) {
this.inc = inc;
this.countTo = countTo;
}
@Override
public void run() {
for (int i=0;i<this.countTo;i++) {
if (this.inc)
Magic.counter++;
else
Magic.counter--;
}
}
}
tôi đã chạy chương trình vài lần, và luôn luôn nhận được kết quả tích cực hơn nhiều sau đó tiêu cực. Tôi cũng đã cố gắng thay đổi trật tự của chủ đề nào bắt đầu nhưng điều này không thay đổi gì cả. Một số kết quả:
Number of results < 0 | Number of results > 0 | Number of results = 0
1103 8893 4
3159 6838 3
2639 7359 2
3240 6755 5
3264 6728 8
2883 7112 5
2973 7021 6
3123 6873 4
2882 7113 5
3098 6896 6
Bạn có thể muốn làm cho Magic.counter biến không ổn định, nếu không hoạt động có thể được sắp xếp lại và/hoặc giá trị của nó có thể được lưu trữ cho mỗi chủ đề trong một thanh ghi. – prunge