gpt4 book ai didi

java - 多线程返回值

转载 作者:行者123 更新时间:2023-11-30 06:21:27 25 4
gpt4 key购买 nike

我正在开发一个使用套接字的 Java 项目。由于套接字方法是阻塞方法,我不得不制作一个多线程应用程序。

截至目前,我能够读取来自其他应用程序的传入字节。我将它们写入 StringBuilder。我的问题是如何将这个字符串返回到我的主线程。我在想类似事件的东西,一旦 Socket-Thread 完成读取我就可以调用它。

我很高兴有任何想法。

public class SocketRunnable implements Runnable {

private final Socket _socket;


public SocketRunnable(Socket socket){
this._socket = socket;
}

@Override
public void run() {
StringBuilder sb = new StringBuilder();
try {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
this._socket.getInputStream()));


char[] buffer = new char[100];
int amountOfBytes = bufferedReader.read(buffer, 0, 100); // blocks until the message is received.
String message = new String(buffer, 0, amountOfBytes);
sb.append(message);

} catch (IOException ex) {
Logger.getLogger(SocketRunnable.class.getName()).log(Level.SEVERE, null, ex);
}
finally{

// Return (!)
}

}

最佳答案

My problem is how to return this string back to my main thread.

你不能——不是因为任何技术障碍,而是因为它在概念上没有意义。您的主线程已经继续运行,并且您的返回值有意义的上下文丢失了。

所以,要么:

  • 您的主线程必须阻塞才能接收结果(但是多线程的意义何在);

  • 您的主线程已经按照面向事件的方式从头开始设计,并且有一个外部事件循环,它从队列中取出事件并处理它们(这是真的,如果你正在构建一个 GUI 应用程序)。

更有意义的是让结果对其他代码可用。这一切都可能发生在同一个线程中,即执行接收的线程。您可以通过简单地调用适当的方法来实现这一点。因此,在您的设计中要解决的问题是,如何使具有该方法的实例可供在读取线程中执行的代码使用。

关于java - 多线程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472329/

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