i++和++i都是i=i+1的意思,可是過程有些許區別:安全
i++:先賦值再自加。(例如:i=1;a=1+i++;結果爲a=1+1=2,語句執行完後i再進行自加爲2)線程
++i:先自加再賦值。(例如:i=1;a=1+++i;結果爲a=1+(1+1)=3,i先自加爲2再進行運算)進程
可是在單獨使用時沒有區別:如for(int i=0;i<10;i++){ }和for(int i=0;i<10;++i) { }沒有區別。變量
i++和++i的線程安全分爲兩種狀況:方法
一、若是i是局部變量(在方法裏定義的),那麼是線程安全的。由於局部變量是線程私有的,別的線程訪問不到,其實也能夠說沒有線程安不安全之說,由於別的線程對他造不成影響。線程安全
二、若是i是全局變量(類的成員變量),那麼是線程不安全的。由於若是是全局變量的話,同一進程中的不一樣線程都有可能訪問到。安全性
若是有大量線程同時執行i++操做,i變量的副本拷貝到每一個線程的線程棧,當同時有兩個線程棧以上的線程讀取線程變量,假如此時是1的話,那麼同時執行i++操做,再寫入到全局變量,最後兩個線程執行完,i會等於3而不會是2,因此,出現不安全性。