有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

代码片段

 @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个不同的服务器循环。如何为每台服务器创建一个线程,使它们都可以同时运行。打印的顺序对我来说没什么大不了的。每个线程应该运行一台服务器,而不应该运行同一台服务器

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


共 (1) 个答案

  1. # 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