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;
ListString[] 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;
List