如何为for循环创建多线程?

时间:2016-11-03 20:48:43

标签: java multithreading

代码段

 @Configuration
@ComponentScan
@EnableAutoConfiguration
public class MonitoringItems {

String servers = prop.getProperty("SERVERS");   
String[] serverArray = servers.split("@!");

List<DartModel> data = new ArrayList<DartModel>();
for(String server:serverArray) {    

try {

    conn = new ch.ethz.ssh2.Connection(server);
    conn.connect();
    boolean isAuthenticated = conn
            .authenticateWithPassword(username_array[j],
                    password_array[j]);
    if (isAuthenticated == false) {
        throw new IOException("Authentication failed.");
    }

我有一个名为serverArray的数组,其中包含200个不同服务器的列表。此循环遍历200个不同的服务器。如何为每个服务器创建一个可以同时运行的线程。它的打印顺序对我来说不是什么大问题。每个线程应该运行1个服务器,不应该运行相同的服务器。

我已经完成了一些简单的多线程教程,但它所做的只是打印具有不同ID的相同内容,以显示正在打印的线程。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8,则可以使用这些流来实现多线程循环:

serverArray.parallelStream().forEach(server -> {
    try {
        ...
    }});

确保循环内部触及的所有内容都是线程安全的 这适用于Collections,对于Arrays,您可以使用静态转换器:

Arrays.stream(serverArray).parallel()

有关Lamba表达式的更多信息:
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

有关并行流的更多信息:
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html