java中证明++操作是非原子的
来源:互联网 发布:手机淘宝如何改店名 编辑:程序博客网 时间:2024/05/18 00:29
class SerialNumberGenerator{private static volatile int i=0;//不是同步的,多个线程操作可能会冲突public static int nextSerialNumber(){return i++;}}class CircularSet{private int[] array;private int len;private int index=0;public CircularSet(int size){this.len=size;array=new int[len];for(int i=0;i<len;i++){array[i]=-1;}}public synchronized void add(int n){array[index]=n;index=++index%len;}public synchronized boolean contains(int n){for(int i=0;i<len;i++){if(array[i]==n){return true;}}return false;}}public class Test {private static final int SIZE=100;private static CircularSet mCircularSet=new CircularSet(1000);private static ExecutorService mExecutorService=Executors.newCachedThreadPool();public static void main(String[] args) throws InterruptedException {for(int i=0;i<SIZE;i++){mExecutorService.execute(new SerialChecker());}TimeUnit.SECONDS.sleep(5);}static class SerialChecker implements Runnable{@Overridepublic void run() {while(true){int serial=SerialNumberGenerator.nextSerialNumber();if(mCircularSet.contains(serial)){System.out.println("Duplicate:"+serial);System.exit(0);}mCircularSet.add(serial);}}}}
0 0
- java中证明++操作是非原子的
- 证明32位java对long和double的写操作不是原子性的
- 从头认识多线程-3.2 使用volatile声明的变量的写操作是非原子性的
- Java中对非原子的64位操作
- Java多线程中实现原子操作的方法
- JAVA多线程中,原子操作的概念——原子操作真的不需要进行同步控制吗?
- Java原子变量&原子操作
- java中volatile与原子操作
- Java并发编程中实现原子操作
- Java中13个原子操作类
- Java:java的原子操作和volatile
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- Qt多媒体技术和编码技术的本地音视频远程传输
- DeleCMS织梦系统后台漏洞解决
- MVC+EF(6)
- JQuery 遮罩层
- Opencv中的cvWaitkey函数的用法
- java中证明++操作是非原子的
- SurfaceView闪屏解决办法
- php 中文件及文件夹的操作
- struts2实现文件的上传
- ER模型插件 ermaster
- java sql 批处理
- MVC+EF(7)
- JS知道两点经纬度求距离
- UE4连接Oculus DK2的那些坑