gpt4 book ai didi

java - 在两个线程之间共享扫描仪

转载 作者:行者123 更新时间:2023-12-01 05:03:16 25 4
gpt4 key购买 nike

如何在两个线程之间共享 Scanner 对象,以便可以将值传递给一个线程中的标准 i/p 流并在另一个线程中显示?

我创建了两个线程,如下所示:

Thread1中我使用了以下代码:

while(true)
{

//Thread.currentThread().sleep(5000); // if I used this it is printing ABCD
str = System1Class.scan.nextLine();
System.out.println(str);
}

Thread2中,我使用以下代码:

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"

此处,“扫描”对象在 ThreadMainClass 类中全局创建,如下所示:

public static Scanner scan = new Scanner(System.in);

两个线程都在访问。我的要求是:我想在从Thread2传递过来的Thread1中显示“ABCD”。它显示如果我放置一些延迟,以便在 Thread1 中的行之前创建 Scanner 对象:

str = System1Class.scan.nextLine();

但我不希望两次使用有任何延迟。那我有什么办法可以做吗?我想在从 Thread2 传递“ABCD”的那一刻显示它。同时,Thread1 应该等待来自控制台的数据,即 Thread1 不应该等待来自 Thread2 的任何通知。如果数据是从 Thread2 传递的,则只需获取它并打印它,否则它应该仅从控制台等待。

我想我需要一种方法来刷新 Thread2 中的“扫描”对象,但我不确定。 :)

提前致谢

最佳答案

要显示它传递的相同实例,您需要调用类中的一个方法,将 AtomicBoolean 变量设置为 true。您必须编写一个方法来循环并检查该变量的真值。如果其true,则立即打印。

还要确保您正在同步读取和写入线程

您还可以通过在 Java 中创建自己的事件来实现此目的

阅读本教程中有关此方法的所有内容:

How to create your own events in Java

关于java - 在两个线程之间共享扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com