[問題] Java Synchronized 請益

看板java作者 (千野羽)時間14年前 (2011/04/26 20:24), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/1
向各位前輩請教一個Synchronized用法的問題 我的程式讀取一個檔案,將檔案內每一行資料個別用一個Thread處理 一次最多用10個thread,並用一個Thread counter去記錄目前已經開了幾個Thread出去 每讀取檔案的一行資料,先檢查Thread counter是否已經開滿了Thread 如果滿了就等待0.1秒再繼續檢查 開出來的Thread在執行完畢後會將 Thread 數目從Thread counter刪去 --------------------部分程式碼---------------- while ((strLine = br.readLine()) != null) { while(((Integer)threadCount.get("thread")).intValue()>=10){ Thread.sleep(100); //檢查thread是否已經超過10條,超過的話sleep 0.1秒再檢查 } synchronized(threadCount){ //開新的thread int count = ((Integer)threadCount.get("thread")).intValue(); threadCount.put("thread", new Integer(count+1)); ProcessChartTasker charttasker = new ProcessChartTasker(threadCount); Thread thread = new Thread(charttasker); thread.start(); } } ProcessChartTasker中,程式執行完畢後會執行下列程式碼將Thread數回收 synchronized(this.threadCount){ int count = ((Integer)this.threadCount.get("thread")).intValue(); this.threadCount.put("thread",new Integer(count-1)); } 目前測試起來在某些狀況下,同一Thread好像不會完全開出10條,甚至當將Thread的數量加大到30時 同時間卻可能只有12~14左右的Thread在執行,甚至要等原本開出來的Thread都執行完畢,才會繼續 開新的Thread 小弟猜想是不是因為在主Thread中synchronized(threadCount),而sub-thread在結束時也會synchronized(this.threadCount) 導致當sub-thread數量增加時,主thread因為搶不到threadCount而無法開出新的Thread? 當其他sub-thread synchronized(this.threadCount)時,在主Thread中檢察Thread Count數量的方法是否會無法取得Thread count數量? 又或是有比較好的檢查機制?煩請各位前輩賜教,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.197.148

04/30 00:47, , 1F
建議你直接用 ThreadPoolExecutor
04/30 00:47, 1F

05/05 06:51, , 2F
感謝建議~~!!
05/05 06:51, 2F
文章代碼(AID): #1DjhcNKq (java)