jialisoftw

          Java多線程對耗時方法的同步問題

          各位大牛,小弟現(xiàn)在遇到一個問題,就是使用多線程調(diào)用一個耗時的方法,如何同步?代碼大體如下: 
          Java代碼:  
          1.   final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);   
          2. final BusinessService service = new BusinessService();   
          3. for(int i = 0; i < 10; i++)  
          4. {  
          5.     scheduler.scheduleWithFixedDelay(new Runnable(){  
          6.         @Override  
          7.         public void run() {  
          8.             service.handleBusiness();  
          9.         }  
          10.           
          11.     }, i, 5, TimeUnit.MINUTES);  
          12. }  
          這個時候,如果在handleBusiness()方法上加上
          Java代碼:  
          synchronized  
          ,其它線程就進(jìn)不了這個方法,因為這個方法需要耗時5分鐘左右,大家?guī)兔ο胂胗猩逗玫慕鉀Q辦法,能讓所有線程不等待,就可以調(diào)用這個方法又保持原子操作.
          解決方法:handleBusiness()寫成線程安全的就好了。

          posted on 2013-01-15 15:41 飛豬一號 閱讀(1632) 評論(3)  編輯  收藏

          評論

          # re: Java多線程對耗時方法的同步問題 2013-01-16 10:13 imxylz

          既然是非線程安全的代碼,必然需要同步,這樣多線程執(zhí)行和單線程沒有分別。改寫代碼為線程安全才是正確的道理。

          實在沒有辦法,應(yīng)該降低handleBusiness里面的鎖的粒度,最終需要同步的邏輯越少越好。  回復(fù)  更多評論   

          # re: Java多線程對耗時方法的同步問題 2013-01-29 12:15 I Love me

          <script>alert();</script>  回復(fù)  更多評論   

          # re: Java多線程對耗時方法的同步問題 2013-03-06 10:40 紅色石頭

          handleBusiness()寫成線程安全的就好了。哈哈,是百度上弄的嗎?  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 钟祥市| 湟中县| 蓬安县| 贡山| 稻城县| 卢氏县| 松溪县| 肃南| 清水河县| 民乐县| 青田县| 梁山县| 蕉岭县| 洱源县| 葵青区| 深水埗区| 鄯善县| 门头沟区| 奈曼旗| 廊坊市| 灵丘县| 玉门市| 奉新县| 闻喜县| 壤塘县| 衡山县| 扬中市| 青海省| 晋宁县| 缙云县| 藁城市| 资源县| 徐州市| 彩票| 开封县| 昭通市| 五寨县| 昌邑市| 花莲县| 乌拉特中旗| 孟村|