2016-09-15 52 views
0

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

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

在下面的例子中,我有一个Thread.currentThread()。getName()的问题,我需要使用lambda表达式。

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()); 
    } 
} 
+2

你的主要问题是你命名你的Thread类。所以Thread.currentThread()。getName试图找到你的类的方法,而不是java.lang.Thread。是的,互联网充满了多线程的例子,无法正常工作。对于lambda部分,请参阅[如何从Java8 lambda创建Runnable](http://stackoverflow.com/q/34026903/217324) –

+0

您有什么问题与Thread.currentThread()。getName()'? – Jhonny007

+0

只需使用'java.lang.Thread.currentThread()。getName()' – Xyaren

回答

3

Lambda可以用IntStream轻松完成。

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()); 
    } 
} 
2

对于拉姆达我建议:

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())); 
     } 
    } 
} 

,或者如果你想全力以赴的lambda表达式

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()))); 
    } 
}