我用Java开发的多线程应用程序。新线程功能是运行网络协议客户端和服务器。多线程共享变量
我的问题是在UDP“线程”,找到其他情况下,本地网络中,并将它们存储在列表中。但是所有新线程都是由其他类(主线程)调用的命名线程。所以我的问题是线程完成后得到处理列表。
我试图通过列表构造函数的参数,我让主线程等待线程结束,但随后列表为空时,它应该与一些元素。
谢谢。
编辑与示例代码
public class MainClass{
public static void main(String[] args) {
List<String> tmp = new ArrayList<>();
Thread t1 = new Thread(UDPClient(tmp));
t1.start();
t1.join();
//It should be one but it'll be 0
System.out.println(tmp.size);
}
}
和separeted类:
public class UDPClient implements Runnable{
private List<String> foundInstances;
public UDPClient(List<String> instances)
{
foundInstances = instances;
}
public void run()
{
//do stuff
foundInstances.add("Hello world");
}
}
这是一个简单的例子...
那么你想通过一个列表?有线程安全列表,你可以在这里找到他们选择最好的一个适合你http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html –
让我们想象一下我有2个线程:运行udp客户端(命名线程,分离类)的主要线程和其他线程...在主线程中,我使用udp客户端类创建一个新线程并启动它。我如何从主线内的线程中获取找到的实例? 我试图通过参数来传递一个列表到UDP类的构造和使用,但我不能使用,因为该列表是在结束时清空。 – nervousDev
@nervousDev从不使用评论提供更多信息。始终编辑您的问题以改进它!你可能会寻找这一概念被称为期货(见https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html) – GhostCat