Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Lock与synchronized 的区别(3)

来源: 未知 分享至:
  • this.threadNum=_threadNum;
  • cb=_cb;
  • preInit=new int[round];
  • for(int i=0;i<preInit.length;i++){
  • preInit[i]=r.nextInt(100);
  • }
  • }
  •  
  • abstract void sumValue();
  • /*
  • * 对long的操作是非原子的,原子操作只针对32位
  • * long是64位,底层操作的时候分2个32位读写,因此不是线程安全
  • */
  • abstract long getValue();
  •  
  • public void testTime(){
  • ExecutorService se=Executors.newCachedThreadPool();
  • long start=System.nanoTime();
  • //同时开启2*ThreadNum个数的读写线程
  • for(int i=0;i<threadNum;i++){
  • se.execute(new Runnable(){
  • public void run() {
  • for(int i=0;i<round;i++){
  • sumValue();
  • }
  •  
  • //每个线程执行完同步方法后就等待
  • try {
  • cb.await();
  • } catch (InterruptedException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • } catch (BrokenBarrierException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  •  
  •  
  • }
  • });
  • se.execute(new Runnable(){
  • public void run() {
  •  
  • getValue();
  • try {
  • //每个线程执行完同步方法后就等待
  • cb.await();
  • } catch (InterruptedException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • } catch (BrokenBarrierException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  •  
  • }
  • });
  • }
  •  
  • try {
  • //当前统计线程也wait,所以CyclicBarrier的初始值是threadNum*2+1
  • cb.await();
  • } catch (InterruptedException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • } catch (BrokenBarrierException e) {
  • // TODO Auto-generated catch block
  • e.printStackTrace();
  • }
  • //所有线程执行完成之后,才会跑到这一步
  • long duration=System.nanoTime()-start;
  • out.println(id+" = "+duration);
  •  
  • }
  •  
  • }

  • Tags:
    分享至:
    最新图文资讯
    1 2 3 4 5 6
    验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史