亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在 Java 中完成其他方法時暫??刂婆_ intpu

如何在 Java 中完成其他方法時暫??刂婆_ intpu

蠱毒傳說 2021-08-06 10:19:34
我在 Java 中有以下任務:用戶正在向控制臺寫入消息。我正在閱讀此輸入并將其處理為相關對象(書籍)。當處理的書籍數量等于 30 時,我必須暫??刂婆_輸入,記錄到目前為止已處理書籍的報告,然后繼續從控制臺接收消息。(由于是控制臺應用,所以假設是單線程應用)我是并發編程的新手,但從我讀過的內容來看,我需要使用wait()和notify()方法。到目前為止,我的應用程序結構如下:InputReader.java- 從控制臺讀取輸入并轉換為相關對象的主類 BookReader.java- 類,最重要的方法是處理一本書(同時記錄到目前為止處理的書籍數量)。讓我們稱之為public static store(Book book)。因此,InputReader.java在讀取單個控制臺行后,我將其處理為一個Book對象,然后調用BookReader.keep(book)(因為calss 中的store方法BookReader.java是靜態的)。問題(或我掙扎的部分)是如何在閱讀第 30 本書后暫停控制臺,然后打印輸出。從我讀過的內容來看,我應該wait()在我的store(Book book)方法notify()內部和將執行報告的方法內部使用。因為store(Book book)是static我讀過的一種方法,我應該private static final Object lock = new Object();在我的BookStore.java班級?所以目前我的結構類似于以下內容:protected static synchronized void reader(Book book) throws InterruptedException {        counter++;        //some method which will keep my books into a local datastructure        if(counter == 30) {            LOGGER.info("The console should stop accept new input now");            synchronized(lock){                lock.wait();             }             // my main question: do I need to call printReport() here? If not here, then where?            report();        }    }以及report()打印報告后的方法應該使控制臺可用于讀取新消息:private static synchronized void report() {        synchronized(lock){            System.out.printline("print some report here")            }            // I guess after the report is printed, I should use notifyAll() and that will make the console again available for reading an input?            lock.notifyAll();        }    }請記住,由于 mystore(Book book)是靜態的,因此我將其static Object lock = new Object();用作BookReader.java類的對象。我的主要問題是:我是否report()在正確的位置調用該方法?如果沒有,那么在哪里?
查看完整描述

2 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

我的想法是進行“變通”并將“報告時間”期間的所有傳輸保存在隊列等集合中,然后在您報告狀態時閱讀隊列中的書籍。Mabye 那是您問題的另一種解決方案。


查看完整回答
反對 回復 2021-08-06
  • 2 回答
  • 0 關注
  • 373 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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