gpt4 book ai didi

JAVA - 在主线程中使用同步列表线程

转载 作者:行者123 更新时间:2023-12-01 11:23:40 26 4
gpt4 key购买 nike

我在类中有一个用于创建线程的方法,我需要使用线程列表。

public class LocalClient {

/*
* Some Stuff
*/
LocalClientThread thr;

public LocalClient(){

this.setHotes();

for(InetAddress i : thr.getNetwork())
System.out.println(i.getHostAddress()); //no error but write nothing.


}
public void setHotes(){

thr = new LocalClientThread(c);
Thread t = new Thread(thr);
t.start();

}

还有我的主题

public class LocalClientThread extends Thread {

List<InetAddress> network = Collections.synchronizedList(new ArrayList<InetAddress>());

DatagramSocket c;

public LocalClientThread(DatagramSocket c){
this.c = c;
}

@Override
public void run(){
while(true){

/* Some Stuff
*/

network.add(receivePacket.getAddress());
}
}

}
/**
* @return the network
*/
public List<InetAddress> getNetwork() {
return network;

}
}

实际上我的线程正确地将所有收到的地址添加到列表中。

但是我想在线程完成添加所有地址时使用该列表...有任何想法吗 ?

最佳答案

使用Thread.join()为了等待您的线程结束,然后调用 getNetwork() 以访问您的线程刚刚填充的列表。

在您的代码中,这看起来像:

thr = new LocalClientThread(c);
Thread t = new Thread(thr);
t.start();
t.join(); // waits for Thread t to come to end
List<InetAddress> collectedAddresses = thr.getNetwork();

关于JAVA - 在主线程中使用同步列表线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000707/

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