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 楼答案
如果您使用的是Java 8,则可以使用流来实现多线程循环:
确保循环内接触的所有东西都是线程安全的
这适用于
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