如何在兩個線程之間共享Scanner對象,以便我可以在一個線程中將值傳遞給標準I/P流並顯示在另一個線程中?在兩個線程之間共享掃描器
我已經創建如下兩個線程:
在線程1我用下面的代碼:
while(true)
{
//Thread.currentThread().sleep(5000); // if I used this it is printing ABCD
str = System1Class.scan.nextLine();
System.out.println(str);
}
在線程2我使用下面的代碼:
String st = "ABCD";
InputStream is = new ByteArrayInputStream(st.getBytes());
System.setIn(is);
ThreadMainClass.scan = new Scanner(System.in); // here I am trying to refresh the global object "scan"
這裏'scan'對象在ThreadMainClass類中全局創建爲:
public static Scanner scan = new Scanner(System.in);
它正在由兩個線程訪問。我的要求是:我想在從Thread2傳遞的Thread1中顯示「ABCD」。它顯示的是如果我把一些延遲,使掃描對象將前行的線程1創建:
str = System1Class.scan.nextLine();
但是,我不想要兩個使用任何延遲。那麼我有什麼辦法可以做?我想在從Thread2傳遞的那一刻顯示「ABCD」。同時,Thread1應該等待來自控制檯的數據,即Thread1不應該等待來自Thread2的任何通知。如果從Thread2傳遞數據,只需獲取它並打印它,否則它應該只從控制檯等待。
我想我需要一種方法來刷新Thread2中的'掃描'對象,但我不確定。 :)
在此先感謝
您可以通過使用ManualResetEvent的同步2個線程,線程2將通知線程1時,線程2已經讀出的值到掃描儀實現這一目標。 – Thinhbk
@Thinhbk這是否意味着Thread1將等待來自Thread2的通知?我想要的是我不想等待來自Thread2的通知。 Thread1應該獨立地等待來自控制檯的輸入。它也應該能夠在任何時刻從Thread2獲取值。 – Angom