亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java-BlockingQueue的使用

2019-11-15 00:51:58
字體:
來源:轉載
供稿:網友
java-BlockingQueue的使用

每次都是隔很長時間才在博客中寫點什么,說自己忙吧,這是給自己的一個借口,其實呢還是懶啊。哎。。。

最近項目中有個對比的需求,需要從日志文件中獲取到參數,然后調用不同的API,進行結果的對比。但是不知用什么方式比較好,于是查了下jdk的手冊,發現了BlockingQueue這個好東西。

關于BlockingQueue的介紹,大家有興趣的可以自己看下:http://docs.Oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html

需求呢其實很簡單就是將參數放置到Queue中,然后交由下一個策略去消費。剛開始時是通過不同的線程往隊列中存放數據,然后返回給下個服務一個BlockingQueue的對象,下一個策略從隊列中消費,code如下:

@Sup

  可是在實際運行時,由于日志比較大,下一個策略可能要等1hour或更長的時間才能開始處理,這明顯是不符合要求的,于是又優化了下,將BlockingQueue改為全局static的,然后下一個策略可以直接監控這個隊列中是否有值,有值就消費,沒值就阻塞線程等待或者超時等其他處理。

改進后的code:

1、新建一個隊列類:

public class ParameterQueue extends LinkedBlockingQueue<InputOutputPrameters> {/** *@Fields serialVersionUID: */private static final long serialVersionUID = 6032356446145302484L;private static BlockingQueue<InputOutputPrameters> queue = new LinkedBlockingQueue<InputOutputPrameters>();/** * @Fields log: 日志記錄 */private static final Logger log = LoggerFactory.getLogger(ParameterQueue.class);/**  * 獲取隊列中的對象  * @Method:getParameter * @Description: 獲取隊列中的對象  * @return 獲取到的對象信息*/public static InputOutputPrameters getParameter(){InputOutputPrameters result = null;try {result  = (InputOutputPrameters)queue.take();} catch (Exception e) {log.error("獲取隊列異常,異常信息:" + e);}return result;}/**  * 獲取隊列的數量 * @Method:getQueueSize * @Description: 獲取隊列的數量  * @return 數量*/public static Integer getQueueSize() {return queue.size();}/**  * 放置參數到隊列中  * @Method:putParameter * @Description: 放置參數到隊列中  * @param parameter 要放置的對象*/public static void putParameter(InputOutputPrameters parameter) {try {queue.put(parameter);} catch (Exception e) {log.error("插入隊列異常,異常信息:" + e);}}}

  2、讀取文件時,直接操作該隊列,往隊列中put值,下一個策略從該隊列中get值,put的code如下:

public void getSource(String path) {try {File file = new File(path);BufferedReader reader = null;String tempStr = null;try {reader = new BufferedReader(new FileReader(file));while ((tempStr = reader.readLine()) != null) {final InputOutputPrameters parameter = new InputOutputPrameters();String[] list = tempStr.split(";");if (list != null && list.length > 0) {parameter.setInputParamters(list[0]);parameter.setOutputParameters(list[1]);}putInQueue(parameter);}reader.close();} catch (FileNotFoundException  e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally { if (reader != null) { try { reader.close(); } catch (Exception e) { e.printStackTrace(); } } }} catch (Exception e) {log.error("系統異常: " + e);}}/**  * 將參數存放至隊列中  * @Method:putInQueue * @Description: 將參數存放至隊列中  * @param parameter 要存放的對象*/private void putInQueue(final InputOutputPrameters parameter) {new Thread(){public void run(){try {Thread.sleep((long)(Math.random()*100));log.info("開始存入數據!");ParameterQueue.putParameter(parameter);log.info("已經存入數據,目前隊列中有 " + ParameterQueue.getQueueSize() +" 個隊列!輸入參數:"+ parameter.getInputParamters() + ";/n輸出參數:" + parameter.getOutputParameters());} catch (Exception e) {log.error("系統異常:" + e);}}}.start();}

  

于是這個要求就達到了。記錄下這個小需求,方便以后查閱。

簡要說下,BlockingQueue是線程安全的,常用的是ArrayBlockingQueue、LinkedBlockingQueue

ArrayBlockingQueue需要制定容量,而LinkedBlockingQueue不需要

同時在消費時,take()是會阻塞線程的,如果是單線程跑時,take()不到時整個線程就卡了

所以看具體環境需求,是用take還是其他的,我一般用poll,因為可以制定超時時間。

哎 不知道怎么寫了,就這樣吧。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美丰满片xxx777| 亚洲国产精品久久久久秋霞蜜臀| 久久琪琪电影院| 九色精品美女在线| 一区二区国产精品视频| 日韩精品在线观看一区二区| 亚洲高清一二三区| 午夜精品99久久免费| 亚洲成人精品视频在线观看| 国产精品r级在线| 疯狂欧美牲乱大交777| 色综久久综合桃花网| 久久青草福利网站| 亚洲在线视频观看| 国产精品免费久久久久影院| 成人美女av在线直播| 在线视频欧美日韩| 日韩一区二区三区xxxx| 久久视频在线观看免费| 亚洲精品videossex少妇| 成人网页在线免费观看| 欧洲中文字幕国产精品| 最近2019年日本中文免费字幕| 成人av资源在线播放| 中文字幕欧美精品在线| 欧美视频裸体精品| 国自产精品手机在线观看视频| 九色成人免费视频| 国产69精品久久久久99| 亚洲另类激情图| 日韩av免费看| 亚洲天堂av在线播放| 清纯唯美亚洲激情| 欧美黑人狂野猛交老妇| 日韩小视频网址| 国产亚洲成av人片在线观看桃| 亚洲a∨日韩av高清在线观看| 欧美黄色性视频| 亚洲国产91色在线| 日韩在线小视频| 91亚洲午夜在线| 热久久美女精品天天吊色| 久久青草精品视频免费观看| 亚洲wwwav| 色婷婷av一区二区三区在线观看| 亚洲国产精品va| 久久精品久久久久电影| 国产成人高清激情视频在线观看| 国产欧美日韩综合精品| 国产日韩欧美在线播放| 欧美国产精品日韩| 98精品国产高清在线xxxx天堂| 国内精品一区二区三区| 中文精品99久久国产香蕉| 亚洲欧美成人一区二区在线电影| 78色国产精品| 久久视频在线观看免费| 久久精品久久久久电影| 91视频国产高清| 最新中文字幕亚洲| 精品视频在线导航| 久久高清视频免费| 日韩美女在线播放| 亚洲欧美日本另类| 亚洲精品久久久久久久久久久| 日韩av免费一区| 欧美在线视频免费观看| 91久久中文字幕| 欧美高清视频免费观看| 日韩成人在线视频观看| 国产成人精品综合| 国产精品高潮视频| 丝袜情趣国产精品| 欧美高清视频一区二区| 1769国产精品| 激情久久av一区av二区av三区| 国产美女久久精品| 这里精品视频免费| xxx成人少妇69| 国产精品女视频| 中国人与牲禽动交精品| 国产成人精品一区二区在线| 欧美另类暴力丝袜| 亚洲精品久久久久久久久久久久久| 日韩av网址在线| 亚洲激情中文字幕| 国产成人鲁鲁免费视频a| 亚洲人在线观看| 这里只有精品视频在线| 国产一区二区三区丝袜| 91亚洲精品一区二区| 91地址最新发布| 久久99精品国产99久久6尤物| 国产精品青青在线观看爽香蕉| 亚洲国产精品久久久| 日韩精品免费在线播放| 欧美第一页在线| 91精品免费久久久久久久久| 国产香蕉精品视频一区二区三区| 狠狠躁夜夜躁人人爽超碰91| 国产精品日日摸夜夜添夜夜av| 国产精品国语对白| 国产精品福利无圣光在线一区| 亚洲精品日韩欧美| 日韩欧美在线中文字幕| 色综合色综合久久综合频道88| 久久综合电影一区| 91成人免费观看网站| 日韩在线播放av| 91禁外国网站| 日韩电影免费在线观看中文字幕| 成人欧美在线视频| 97av在线播放| 日韩小视频网址| 国产一区二区三区在线看| 欧美精品在线第一页| 欧美性猛交xxxxx水多| 亚洲成人精品久久| 成人国产亚洲精品a区天堂华泰| 成人久久一区二区三区| 最新69国产成人精品视频免费| 日韩在线观看免费全| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲一区二区福利| 久久精品这里热有精品| 欧美另类精品xxxx孕妇| 91精品国产91久久久久久久久| 91在线直播亚洲| 欧美成人精品h版在线观看| 欧美激情一区二区三区在线视频观看| 日韩中文字幕视频在线| 亚洲国产精品高清久久久| 精品亚洲一区二区| 亚洲伊人久久大香线蕉av| 91在线播放国产| 96精品视频在线| 欧美一区三区三区高中清蜜桃| 午夜免费在线观看精品视频| 欧美另类在线观看| 国产免费亚洲高清| 国产成人综合av| 国产精品一区=区| 亚洲欧洲国产一区| 欧美精品久久久久久久| 日韩av免费在线看| 91在线观看免费观看| 国产精品一区二区电影| 中文字幕日本欧美| 日韩在线视频网| 精品欧美激情精品一区| 欧美色视频日本高清在线观看| 国产免费一区二区三区在线观看| 精品久久久久久久久久ntr影视| 欧美大片在线看免费观看| 这里只有精品在线播放| 久久久亚洲网站| 一道本无吗dⅴd在线播放一区| 色樱桃影院亚洲精品影院| 一区二区av在线| 91亚洲午夜在线| 国产精品久久av| 亚洲在线第一页| 九九精品在线播放| 午夜精品一区二区三区在线播放|