Java 如何使用线程打印字符串数组

Java 如何使用线程打印字符串数组,java,multithreading,Java,Multithreading,我有一个字符串数组: 如何通过单独的线程打印它的每个值?每个值都是一个线程。线程的创建量与数组中字符串的创建量相同。谢谢 我对此只有一类线程: class Worker extends Thread{ } 迭代数组的每个元素,并从每个元素构造一个Worker。Worker类应该重写run方法以打印字符串 class Worker extends Thread{ private String message; public Worker(final String message)

我有一个字符串数组:

如何通过单独的线程打印它的每个值?每个值都是一个线程。线程的创建量与数组中字符串的创建量相同。谢谢

我对此只有一类线程:

class Worker extends Thread{
}

迭代数组的每个元素,并从每个元素构造一个Worker。Worker类应该重写run方法以打印字符串

class Worker extends Thread{
    private String message;
    public Worker(final String message){
       this.message = message;
    }
    @Override
    public void run(){
      System.out.println(message);
    }
}
public class Main {
    public static void main(String[] args){
       String[] messages = new String[]{"aaaa", "bbbb", "cccc"};
       for(final String message: messages){
         new Worker(message).start();
       }
    }
}

迭代数组的每个元素,并从每个元素构造一个Worker。Worker类应该重写run方法以打印字符串

class Worker extends Thread{
    private String message;
    public Worker(final String message){
       this.message = message;
    }
    @Override
    public void run(){
      System.out.println(message);
    }
}
public class Main {
    public static void main(String[] args){
       String[] messages = new String[]{"aaaa", "bbbb", "cccc"};
       for(final String message: messages){
         new Worker(message).start();
       }
    }
}
执行器服务,而不是扩展线程 Executors框架被添加到Java中,以减轻美国应用程序程序员处理线程的负担。看

从Executors获取executor服务

将任务编写为Runnable的实现。 请注意,与您的代码相比,我们并没有扩展线程

String[] messages = new String[]{ "aaaa" , "bbbb" , "cccc" } ;
for( String message : messages ) 
{
    es.submit(
         () -> { System.out.println( message ) ; }
    ) ;
}
在上面的代码中,我们使用lambda语法。您也可以使用传统语法

当使用多个线程的线程池运行时,任务的执行顺序是不确定的。例如,运行时,输出可能如下所示:

aaaa

中交

bbbb

字符串[]消息=新字符串[]{aaaa、bbbb、cccc}; 对于字符串消息:消息 { 提交 新Runnable { @凌驾 公开募捐 { System.out.println消息; } } ; } 顺便说一下,在Java中,列表通常比数组更方便

List< String > messages = List.of( "aaaa" , "bbbb" , "cccc" ) ;
for( String message : messages ) 
{
    es.submit(
         () -> { System.out.println( message ) ; }
    )
}
查看整个示例类

导入java.util.*; 导入java.lang.*; 导入java.io.*; 导入java.time.Instant; 导入java.util.List; 导入java.util.concurrent.ExecutorService; 导入java.util.concurrent.Executors; 导入java.util.concurrent.TimeUnit; /*只有当类是公共的时,类的名称才必须是Main*/ 表意文字 { 公共静态void主字符串[]args引发java.lang.Exception { System.out.println start.+Instant.now; ExecutorService es=Executors.newCachedThreadPool; Listmessages=List.of aaaa、bbbb、cccc; 对于字符串消息:消息 { 提交 ->{System.out.println消息;} ; } System.out.println任务提交给executor service.+Instant.now; 尝试 { Thread.sleep TimeUnit.SECONDS.toMillis 3; } 捕捉中断异常e { e、 打印跟踪; } System.out.println Done.+Instant.now; } } 执行器服务,而不是扩展线程 Executors框架被添加到Java中,以减轻美国应用程序程序员处理线程的负担。看

从Executors获取executor服务

将任务编写为Runnable的实现。 请注意,与您的代码相比,我们并没有扩展线程

String[] messages = new String[]{ "aaaa" , "bbbb" , "cccc" } ;
for( String message : messages ) 
{
    es.submit(
         () -> { System.out.println( message ) ; }
    ) ;
}
在上面的代码中,我们使用lambda语法。您也可以使用传统语法

当使用多个线程的线程池运行时,任务的执行顺序是不确定的。例如,运行时,输出可能如下所示:

aaaa

中交

bbbb

字符串[]消息=新字符串[]{aaaa、bbbb、cccc}; 对于字符串消息:消息 { 提交 新Runnable { @凌驾 公开募捐 { System.out.println消息; } } ; } 顺便说一下,在Java中,列表通常比数组更方便

List< String > messages = List.of( "aaaa" , "bbbb" , "cccc" ) ;
for( String message : messages ) 
{
    es.submit(
         () -> { System.out.println( message ) ; }
    )
}
查看整个示例类

导入java.util.*; 导入java.lang.*; 导入java.io.*; 导入java.time.Instant; 导入java.util.List; 导入java.util.concurrent.ExecutorService; 导入java.util.concurrent.Executors; 导入java.util.concurrent.TimeUnit; /*只有当类是公共的时,类的名称才必须是Main*/ 表意文字 { 公共静态void主字符串[]args引发java.lang.Exception { System.out.println start.+Instant.now; ExecutorService es=Executors.newCachedThreadPool; Listmessages=List.of aaaa、bbbb、cccc; 对于字符串消息:消息 { 提交 ->{System.out.println消息;} ; } System.out.println任务提交给executor service.+Instant.now; 尝试 { Thread.sleep TimeUnit.SECONDS.toMillis 3; } 捕捉中断异常e { e、 打印跟踪; } System.out.println Done.+Instant.now; } } 使用循环,将每个字符串传递给Worker类的构造函数。或者将索引传递到数组中,但传递字符串本身更容易。建议在中使用implements Runnable 而不是延长线程。然后使用new Threadnew Worker实例化线程,或使用循环将Worker提交给执行服务等,将每个字符串传递给Worker类的构造函数。或者将索引传递到数组中,但是传递字符串本身更容易。建议使用implements Runnable而不是extends Thread。然后使用new Threadnew Worker来实例化线程,或者将Worker提交给执行服务,等等。