Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为for循环创建多线程?_Java_Multithreading - Fatal编程技术网

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表达式和并行流的链接。希望这有帮助!不要如果你有确切的问题,请告诉我。