gpt4 book ai didi

java - 在线程中获得特定输入后,如何退出线程中运行的循环?在java中

转载 作者:行者123 更新时间:2023-12-01 06:20:30 24 4
gpt4 key购买 nike

import java.io.*;

public class ThreadSanbox {

public static void main(String[] args) {

Thread t1 = new Thread(new Runnable(){
@Override
public void run()
{
StopThread stX = new StopThread();
boolean runLoopX = true;
while (runLoopX) {
System.out.println("runLoopX val: "+runLoopX);
runLoopX = stX.getRunLoop();
}
System.out.println("runLoopX val: "+ runLoopX);
}
});
Thread t2 = new Thread(new Runnable(){
@Override
public void run()
{
BufferedReader userInput = new BufferedReader(
new InputStreamReader(System.in));
String userInputStr = "";
StopThread st = new StopThread();
int count = 0;
do {
try {
System.out.println("Enter a value:");
userInputStr = userInput.readLine().trim();
System.out.println("User Input: " + userInputStr);
count++;
} catch (Exception e) {System.err.println(e.toString());}
} while (userInputStr.equals("e") == false);
st.setRunLoop(false);
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (Exception e) {System.err.println(e.toString());}
}
}

class StopThread
{
private boolean runLoop = true;
public synchronized boolean getRunLoop() {return runLoop;}
public synchronized void setRunLoop(boolean val) {runLoop = val;}
}

在上面的代码中,我想运行线程 t1 和 t2。在 t2 中,我想从键盘获取输入,如果输入是 e,我想退出 do while 并将 runLoop 的值设置为 false,以便 t1 中的 while 循环也退出。我该怎么做?

最佳答案

问题在于您的两个线程有​​两个单独的 StopThread 实例。您需要它们共享一个实例,以便它们可以进行通信。

实现此目的的一种方法是创建 Thread 或 Runnable 的子类,以便您可以将共享的 StopThread 实例传递给它们的构造函数中的每个子类。

另一种方法是在封闭类中创建一个简单变量(两个线程都能够“看到”这个变量,以便它们可以使用它进行通信)。

关于java - 在线程中获得特定输入后,如何退出线程中运行的循环?在java中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026361/

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