gpt4 book ai didi

java - 如何在 Java 中将 ArrayList 发送到线程时执行多线程和 Socket 编程

转载 作者:行者123 更新时间:2023-12-01 15:49:05 28 4
gpt4 key购买 nike

基本上,我需要解析一个 XML 文件,将其放入类对象的 ArrayList 中,并将其(以及套接字)传递给线程。然后,该线程将使用给定的 ArrayList 执行一些功能,并将结果传递回套接字。我的问题是,我无法将解析后的数据以 ArrayList 的形式传递给线程。

这是一些代码:

 public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;

/*xml parsing is done, result is saved in ArrayList<class> peds*/

try {

serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444." + e);
System.exit(-1);
}

while (listening){
Socket s = serverSocket.accept();
Runnable proExec = new KKMultiServerThread( s, peds); **
Thread th = new Thread (proExec)
th.start(); }

serverSocket.close();

}


class KKMultiServerThread implements Runnable{
private Socket socket = null;
public final ArrayList<show> peds;

public KKMultiServerThread(Socket socket, ArrayList<show> peds) {

this.socket = socket;
this.peds = peds;
}

** 问题发生在这一行。说:不能从静态上下文引用非静态变量。

尝试了所有可能的组合(例如将可运行类放在另一个文件中,并调用函数来返回数据结构。IDE 不允许我这样做。)

似乎这个问题唯一可能的解决方案是解析 xml 文件并将其保存在每个线程的数据结构中......这似乎成本太高而效率低下。

请帮忙!

最佳答案

您的 peds 变量不是静态的,因此无法从静态上下文访问它,它需要封闭类的对象。

最简单的解决方案是使其静态。

但是,如果逻辑上每个请求需要一个 ArrayList(以便一次处理多个请求),您可能应该为每个请求创建一个新的 ArrayList 并将其传递给线程。

关于java - 如何在 Java 中将 ArrayList 发送到线程时执行多线程和 Socket 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489433/

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