猿问

java synchronized 同步问题

请问通过下面这种方法能起到防止haha()和run()中的synchronized中的内容同时执行的作用吗?

 public class A{
     public synchronized void haha(){

     }
     class B extends TimerTask{
        @Override
        public void run(){
            synchronized(A.this){

            }
        }
     }
 }


回首忆惘然
浏览 677回答 1
1回答

呼唤远方

&nbsp;public&nbsp;class&nbsp;A{ &nbsp;&nbsp;int&nbsp;value&nbsp;=&nbsp;0; &nbsp;&nbsp;final&nbsp;int&nbsp;NUMBER&nbsp;=&nbsp;1000000; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;synchronized&nbsp;void&nbsp;haha(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;NUMBER;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;++; &nbsp;&nbsp;} &nbsp;&nbsp;class&nbsp;B&nbsp;extends&nbsp;TimerTask{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronized(A.this){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;NUMBER;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])&nbsp;throws&nbsp;InterruptedException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a&nbsp;=&nbsp;new&nbsp;A(); &nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b&nbsp;=&nbsp;a.new&nbsp;B(); &nbsp;&nbsp;&nbsp;&nbsp;ScheduledThreadPoolExecutor&nbsp;executor&nbsp;=&nbsp;new&nbsp;ScheduledThreadPoolExecutor(2); &nbsp;&nbsp;&nbsp;&nbsp;executor.scheduleWithFixedDelay(b,&nbsp;1,&nbsp;1,&nbsp;TimeUnit.SECONDS); &nbsp;&nbsp;&nbsp;&nbsp;executor.scheduleWithFixedDelay(new&nbsp;Runnable()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.haha(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;1,&nbsp;1,&nbsp;TimeUnit.SECONDS); &nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000&nbsp;*&nbsp;9&nbsp;+&nbsp;500); &nbsp;&nbsp;&nbsp;&nbsp;executor.shutdownNow(); &nbsp;&nbsp;&nbsp;&nbsp;System.out.printf("value:&nbsp;%d\n",&nbsp;a.value);&nbsp;&nbsp; &nbsp;&nbsp;} }
随时随地看视频慕课网APP

相关分类

Java
我要回答