代码片段
@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/