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

标签 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 打印相同的内容以显示哪个线程正在打印。

最佳答案

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

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

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

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

关于java - 如何为 for 循环创建多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410973/

相关文章:

java - 将信息从弹出窗口传递到 Oracle ADF 上的主窗口

java - WebSphere MQ 低延迟消息传递 - 它是否具有 JMS(或类似 JMS)API?

c++ - 从 boost::threads 到 boost::asio 计时器

python - 为什么线程分布在 CPU 之间?

java - Java 新手 - If - Else If 问题

java - 对象枚举总是返回空值

ruby-on-rails - Ruby with_advisory_lock 多线程测试间歇性失败

.net - 使用.NET 5 CancellationToken调用可以在主线程上超时的方法

java - JAutodoc - 添加方法参数的数据类型

c++ - Windows 是否有从不用于 processID 的特殊值?