2014-02-14 57 views
0

我有5个线程在无限循环中运行。在所有5个线程每次结束后,我需要获取最终值。我怎样才能做到这一点?从无限循环中获取值

while(true){ 
     new Class1(1,10).start(); 
     new Class1(11,20).start(); 
     new Class1(21,30).start(); 
     new Class1(31,40).start(); 
     new Class1(41,50).start(); 
    } 

我需要确定这5个线程的结束并选择一个在所有线程中更新的特定值。我怎样才能做到这一点?

+0

添加连接。将值写入数组。 – elyashiv

+0

@elyashiv添加一个连接?我听说过加入但尚未尝试过。我会研究一下,让你知道如果这对我有用。你能给我一些简单的例子吗? – Joker

回答

3

这里你的代码将在循环中每次启动5个新线程并不断循环。你确定这就是你想要的吗?

只需使用一个CountDownLatchhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

在初始化5.每个线程计数的锁扣向下一次退出时的闩锁。

主线程等待锁存器命中0,然后进行处理并退出。

不要循环创建线程!

+0

我知道我的代码每次启动5个线程。我有点做一个监督系统,所以我需要这些系统。我还没有听说过CountDownLatch。我一定会看到它是否适用于我,并让你知道。 – Joker

+0

@Parthe每次运行时都不会创建5个线程。你正在创造数千甚至数百万美元。然而,许多while循环管理创建之前,一切都放缓到抓取... –

+0

所以你如何建议,而不是这个,如果我需要连续监测说端口。我的意思是从一天的开始到结束的时候连续检查系统中的开放端口 – Joker

0
while(true){ 
    List<Class1> x = Arrays.asList(new Class1(1,10), new Class1(11,20), new Class1(21,30), new Class1(31,40), Class1(41,50)); 
    for (Class1 t: x) { 
    x.start(); 
    } 
    for (Class1 t: x) { 
    x.join(); 
    } 
} 
+0

我不明白你在上面的代码中做了什么。你能向我解释吗? – Joker