为了账号安全,请及时绑定邮箱和手机立即绑定

java synchronized 同步问题

java synchronized 同步问题

回首忆惘然 2018-07-10 07:23:07
请问通过下面这种方法能起到防止haha()和run()中的synchronized中的内容同时执行的作用吗? public class A{      public synchronized void haha(){      }      class B extends TimerTask{         @Override         public void run(){             synchronized(A.this){             }         }      }  }
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

 public class A{
  int value = 0;

  final int NUMBER = 1000000;

    public synchronized void haha(){
        for (int i = 0; i < NUMBER; i++)
            value ++;
  }

  class B extends TimerTask{
     @Override
     public void run(){
         synchronized(A.this){
            for (int i = 0; i < NUMBER; i++)
                value ++;
         }
     }
  }

  public static void main(String args[]) throws InterruptedException {
    A a = new A();
    B b = a.new B();

    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);

    executor.scheduleWithFixedDelay(b, 1, 1, TimeUnit.SECONDS);
    executor.scheduleWithFixedDelay(new Runnable() {

            @Override
            public void run() {
                a.haha();
            }

    }, 1, 1, TimeUnit.SECONDS);

    Thread.sleep(1000 * 9 + 500);

    executor.shutdownNow();

    System.out.printf("value: %d\n", a.value);  
  }

}



查看完整回答
反对 回复 2018-08-04
  • 1 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信