第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個生產者和多個消費者的互斥問題

一個生產者和多個消費者的互斥問題

ibeautiful 2019-03-06 12:11:56
運行后,消費者一直處于waiting狀態(tài),請問該怎么解決我的想法:生產者,因為使用list存放數據,直接添加數據就好;而消費者使用后,再刪除使用數據List licenses = (ArrayList)obj;pool.addLicenses(licenses);消費者線程,其中pool為數據池:public void run() { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS"); TimeZone t = sdf.getTimeZone(); t.setRawOffset(0); sdf.setTimeZone(t);    synchronized(pool) {         while (true) {             String license = pool.getLicense();             System.out.println("Get "+license);         }     }以下是數據池,使用list存放數據package com.traffic.cache;import java.util.ArrayList;import java.util.List;public class LicensePool {private List<String> licenses = new ArrayList<String>(); public LicensePool() { } public synchronized void addLicenses(List<String> license) {     licenses.addAll(license);     notifyAll(); } public synchronized String getLicense(){     while(!haveLicense()) {         try {             System.out.println("Waiting");             wait();         } catch (InterruptedException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }     String l = licenses.get(0);     System.out.println(l);     licenses.remove(0);     return l; } public boolean haveLicense() {     if(licenses.isEmpty()){         return false;     }     return true; } public int getSize() {     return licenses.size(); }}
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

synchronized(pool)

鎖沒釋放
addLicenses是執(zhí)行不了的

while(!haveLicense()) {

一直為空

查看完整回答
反對 回復 2019-04-26
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

應該在LicensePool 內部對[quote] private List licenses[/quote]做鎖同步,外面就可以不用[quote]synchronized(pool) {[/quote]


查看完整回答
反對 回復 2019-04-26
  • 2 回答
  • 0 關注
  • 1960 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號