i是局部变量情况下,i++和i--是线程安全的;全局变量情况下,i++和i--不是线程安全的。原因是:1...
先说结论:在Java中,i++这样的操作并不是线程安全的。多线程环境中使用i++,可能会出现两个问题:...
只能说自己了解的不够多,自己的水平有限。 先来看下面的示例来验证下 i++ 到底是不是线程安全的。 1000个线程,每个线程对共享变量 count 进行 1000 次 ++ 操作。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39...
面试官问这个问题,稍微懂些答题技巧的朋友就知道回答只要是多线程执行是不安全的。那肯定是线程不安全的呀,线程安全你还问什么,手动狗头!关键是要要分析出面试官问这个问题是为了考察你什么知识点,面试官是想知道你对Java内存模型熟不熟悉。Java内存模型 Java的并发采用的是共享内存模型,在共享内存的并发模型里...
语句i = i++;不是线程安全的。 该语句执行过程如下, 先把i 的值取出来放到栈顶,可以理解为引入了一个第三方变量 k,此时,k的值为i, 然后执行自增操作,i的值变为1, 最后执行赋值操作 i = k (自增前的值) 因此执行结束后,i的值还是0. 从上面的分析可知,i = i++语句的执行过程有多个操作组成,不...
i++和++i的线程安全分为两种情况: 1、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不 安全之说,因为别的线程对他造不成影响。 2、如果i是全局变量(类的成员变量),那么是线程不安全的。因为如果是全局变量的话,同一进程中的不同...
如果是方法里定义的,一定是线程安全的,因为每个方法栈是线程私有的。 JVM的栈是线程私有的,所以每个栈帧上定义的局部变量也是线程私有的,意味着是线程安全的。可以参考http://blog.csdn.net/taohuaxinmu123/article/details/24472073中对Java虚拟机栈(Java Virtual Machine Stacks)的说明。
i++和++i的线程安全分为两种情况: 1、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。 2、如果i是全局变量,则同一进程的不同线程都可能访问到该变量,因而是线程不安全的, ...
i线程安全 java java中线程安全,定义: 当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么这个类是线程安全的。线程安全三要
在Java多线程中,i++和i--是非线程安全的。例子: public class PlusPlusTest { public static void main(String[] args) throws InterruptedException { Num num = new Num(); ThreadA threadA = new ThreadA(num); ThreadB threadB = new ThreadB(num); threadA.start(); threadB.start(); Thread.sl...