首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8的多线程示例

java 8的多线程示例
EN

Stack Overflow用户
提问于 2016-09-15 23:53:54
回答 3查看 22.5K关注 0票数 3

我需要一个多线程的Java 8示例。

我需要能够手动选择线程的数量。

在下面的示例中,我在使用Thread.currentThread().getName()时遇到了问题,我需要使用lambda表达式。

代码语言:javascript
复制
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Thread {

    public static void main(String args[]) {
       ExecutorService service = Executors.newFixedThreadPool(10);
       for (int i =0; i<100; i++){
           service.submit(new Task(i));
       }
    }

final class Task implements Runnable{
    private int taskId;

    public Task(int id){
        this.taskId = id;
    }

    @Override
    public void run() {
        System.out.println("Task ID : " + this.taskId +" performed by "
            + Thread.currentThread().getName());
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-16 01:08:56

使用IntStream可以很容易地实现Lambda。

代码语言:javascript
复制
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;

public class ThreadLauncher
{

  public static void main(String args[])
  {
    ExecutorService service = Executors.newFixedThreadPool(10);
    IntStream.range(0, 100).forEach(i -> service.submit(new Task(i)));
  }
}

final class Task
    implements Runnable
{
  private int taskId;

  public Task(int id)
  {
    this.taskId = id;
  }

  @Override
  public void run()
  {
    System.out.println("Task ID : " + this.taskId + " performed by "
        + Thread.currentThread().getName());
  }
}
票数 10
EN

Stack Overflow用户

发布于 2016-09-16 03:01:13

对于lambda,我建议:

代码语言:javascript
复制
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String args[]) {
        ExecutorService service = Executors.newFixedThreadPool(10);
        for (int i =0; i < 100; i++) {
            final int fi = i;
            service.submit(() -> System.out.println("Task ID : " + fi + " performed by "
                                                      + Thread.currentThread().getName()));
        }
    }
}

或者如果你想在lambdas上全力以赴

代码语言:javascript
复制
public class Main {
    public static void main(String args[]) {
        ExecutorService service = Executors.newFixedThreadPool(10);
        IntStream.range(0, 100)
                 .forEach(i -> service.submit(() 
                            -> System.out.println("Task ID : " + i + " performed by " + Thread.currentThread().getName())));
    }
}
票数 6
EN

Stack Overflow用户

发布于 2020-03-12 15:20:37

希望这对某些人有帮助。一个由3个Thread组成的池被创建并并行运行。

代码语言:javascript
复制
public class threadClass {

ExecutorService executor = Executors.newFixedThreadPool(3);

public void multiThread() {

    Runnable thread1 = () -> {
    // perform some operation
        System.out.println(Thread.currentThread().getName());
    };
    Runnable thread2 = () -> {
        // perform some operation
        System.out.println(Thread.currentThread().getName());
    };
    Runnable thread3 = () -> {
        // perform some operation
        System.out.println(Thread.currentThread().getName());
    };
    executor.execute(thread1);
    executor.execute(thread2);
    executor.execute(thread3);
    executor.shutdown();

}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39515447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档