/**
* @create on 17/3/27
* @description
*/
public class Main {
static volatile int i = 0;
public static class PlusTask implements Runnable{
@Override
public void run(){
for(int k=0; k<10000; k++)
i++;
}
}
public static void main(String[] args) throws InterruptedException{
Thread[] threads = new Thread[10];
for(int i=0;i<10;i++){
threads[i] = new Thread(new PlusTask());
threads[i].start();
}
for(int i=0;i<10;i++){
threads[i].join();
}
System.out.println(i);
}
}
请教各位大牛 为什么这里的输出总是小于10000? 已经调用了thread.join
Anda mungkin memerlukan ini:
atau takrifkan
AtomicInteger
Meruap hanya memainkan peranan dalam ketekalan cache berbilang benang dan tidak menjamin bahawa hanya satu utas akan menulis pembolehubah pada satu masa.
volitile tidak menjamin atomicity
Masalah pembolehubah yang dikongsi dalam operasi berbilang benang Volitale tidak dapat menjamin keatoman operasi komposit, yang bermaksud bahawa utas terakhir tidak boleh sentiasa melihat nilai diubah suai pada utas sebelumnya 🎜>