Các kiểu dữ liệu nguyên thủy như int
& short
an toàn luồng trong Java? Tôi đã thực thi đoạn mã sau và không thể thấy kết quả mong đợi 500 lần.Các kiểu dữ liệu nguyên thủy có an toàn trong Java
public class SampleThree extends Thread
{
static long wakeUpTime = System.currentTimeMillis() + (1000*20);
static int inT;
public static void main(String args[])
{
System.out.println("initial:" + inT);
for(int i=0; i<500; i++)
new SampleThree().start();
try {
Thread.sleep(wakeUpTime - System.currentTimeMillis() + (1000*30));
System.out.println("o/p:" + inT);
}
catch(Exception e){
e.printStackTrace();
}
}
public void run()
{
try {
long s = wakeUpTime - System.currentTimeMillis();
System.out.println("will sleep ms: " + s);
Thread.sleep(s);
inT++; // System.out.println(inT);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Ở đây đồng thời 500 luồng sẽ cập nhật biến int inT
. Chủ đề chính sau khi chờ hoàn thành cập nhật đồng thời, in giá trị inT
.
Tìm ví dụ tương tự here
Không, chúng không phải là chủ đề an toàn. Nếu bạn chỉ có kế hoạch đọc, bạn nên xem xét làm cho các thành viên 'dễ bay hơi'. Nếu bạn có kế hoạch đọc và ghi nó từ các chủ đề khác nhau, bạn nên làm cho nó 'đồng bộ' –