有哥哥可以解释一下这个操作吗 原子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是个计数器,记录method运行次数。 原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断,分为两种情况(两种都应该满足) (1) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。 (2) 在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。 ineed++只需要执行一条指令,并不能保证多个线程ineed++,操作同一个ineed,可以得到正确的结果。因为还有寄存器的因素,多个cpu对应多个寄存器。每次要先把ineed从内存复制到寄存器,然后++,然后再把ineed复制到内存中,这需要至少3步。从这个意义上讲,说ineed++是非原子操作 你在代码里起个上千个线程都指向同一整数引用的i++,如果最终输出的结果i值不等于你起的线程个数,那么中间i++操作一定被分解了.但这玩意是理论的,实际不一定能这么巧出来这个结果. 当使用 操作public int ineed=0; void method(){while(go){ ineed++ ; ineed++; if(ineed%2!=0){ System.out.println("the dead"); Runtime.getRuntime().halt();}}}类似如此 通过大量的循环 在不同步的情况 就会出现一个线程读取另一个线程之前或之后读取或写入的变量就有可能 导致if trigger但 这也许不足以说明 ineed++是原子 因为一个线程写入ineed时 另一个线程可能进行了if 读取ineed因此 想要看到更 能说明ineed++是原子的代码操作谢谢大哥 用dom4j生成xml文件,解析特殊字符的时候出错了,咋办 啊 流操作中的flush() 以下程序共创建了几个Java对象 jsp 怎么读写客户端文件! java中的压缩类碰到中文文件就会失败,请问怎么解决啊?? 关于applet访问数据库的问题(oracle) java连接MySQL的基本问题 800分结帖请feiyuegaoshan(飞跃)领分 高分求中断Thread 如何设置java程序的内存上限? 关于list.remove(object)方法的不解之处? 关于java中正则的处理
ineed++只需要执行一条指令,并不能保证多个线程ineed++,操作同一个ineed,可以得到正确的结果。因为还有寄存器的因素,多个cpu对应多个寄存器。每次要先把ineed从内存复制到寄存器,然后++,然后再把ineed复制到内存中,这需要至少3步。从这个意义上讲,说ineed++是非原子操作
public int ineed=0;
void method(){
while(go){
ineed++ ;
ineed++;
if(ineed%2!=0){
System.out.println("the dead");
Runtime.getRuntime().halt();
}
}
}
类似如此 通过大量的循环 在不同步的情况 就会出现一个线程读取另一个线程之前或之后读取或写入的变量
就有可能 导致if trigger
但 这也许不足以说明 ineed++是原子 因为一个线程写入ineed时 另一个线程可能进行了if 读取ineed
因此 想要看到更 能说明ineed++是原子的代码操作
谢谢大哥