Java 如何为for循环创建多线程?
代码片段Java 如何为for循环创建多线程?,java,multithreading,Java,Multithreading,代码片段 @Configuration @ComponentScan @EnableAutoConfiguration public class MonitoringItems { String servers = prop.getProperty("SERVERS"); String[] serverArray = servers.split("@!"); List<DartModel> data = new ArrayList<DartModel>();
@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.");
}
@配置
@组件扫描
@启用自动配置
公共类监视项{
字符串服务器=prop.getProperty(“服务器”);
字符串[]serverArray=servers.split(@!);
列表数据=新的ArrayList();
对于(字符串服务器:serverArray){
试一试{
conn=新的ch.ethz.ssh2.Connection(服务器);
连接();
布尔值isAuthenticated=conn
.authenticateWithPassword(用户名\数组[j],
密码_数组[j]);
如果(isAuthenticated==false){
抛出新IOException(“身份验证失败”);
}
我有一个名为serverArray的数组,其中包含200个不同服务器的列表。此循环在200个不同的服务器之间循环。如何为每个服务器创建一个线程,使它们都可以同时运行。它的打印顺序对我来说不是什么大问题。每个线程应该运行一个服务器,而不应该运行同一个服务器
我已经完成了一些简单的多线程教程,但它所做的只是用不同的ID打印相同的内容,以显示正在打印的线程。如果您使用的是Java 8,则可以使用流来实现多线程循环:
serverArray.parallelStream().forEach(server -> {
try {
...
}});
确保循环内接触的所有内容都是线程安全的。这适用于
集合
,对于阵列
,您可以使用静态转换器:
Arrays.stream(serverArray.parallel()
有关Lamba表达式的更多信息:
有关并行流的更多信息:
如果你在将来包装每个零件,你可能会实现你想要的。看看螺纹工厂之类的东西。@Carcigenicate你能给我一个通用的例子吗?@Jackie我在打电话,所以这很难。基本上你给它一个你想要并行化的函数,它可能会在一个分离器上并行运行ate线程。只需将循环体作为一个函数,并将其提供给未来。请注意,除非您的计算机中有200个处理内核,否则您永远无法同时运行所有线程。@Carcigenicate当前我的应用程序正在运行,但它需要3-5分钟才能完成编译。然后,当我打开localhost:808时,还需要3-5分钟0将数据显示到网页中。使用future可以运行的最大值是多少?这看起来对我必须做的事情很有希望。你能详细说明一下吗?这是我第一次看到这样的代码。我真的不知道要详细说明什么。我在官方文档中添加了两个关于Lamba表达式和并行流的链接。希望这有帮助!不要如果你有确切的问题,请告诉我。