代码段
@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的相同内容,以显示正在打印的线程。
答案 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