创建线程
多线程方式
package com.source.week5;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.*;
public class ThreadMethod {
//1继承 Thread 方法,并重写 run() 方法
class IM1 extends Thread {
@Override
public void run() {
System.out.println("im 1 线程id:"+ Thread.currentThread().getId());
}
}
//2实现run 接口
class IM2 implements Runnable {
@Override
public void run() {
System.out.println("im 2 线程id:"+ Thread.currentThread().getId());
}
}
//3实现 callable,通过FutureTask 执行
class IM3 implements Callable<Long> {
@Override
public Long call() throws Exception {
System.out.println("im 3 线程id:"+ Thread.currentThread().getId());
return Thread.currentThread().getId();
}
}
//4jdk1.8 parallelStream 并行流
class IM4 {
public void streamOp() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
list.parallelStream().forEach(o -> {
System.out.println("im4 :"+o+" 线程id:"+ Thread.currentThread().getId());
});
}
}
//5从线程池获取线程
class IM5 {
public void t() {
ExecutorService e = Executors.newFixedThreadPool(2);
for (int i = 0; i < 5; i++) {
e.execute(() -> {
System.out.println("im5 : 线程id:"+ Thread.currentThread().getId());
});
}
}
}
//6 spring 异步注解
class IM6 {
// @Async
public void t() {
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main thread id:"+Thread.currentThread().getId());
ThreadMethod m = new ThreadMethod();
IM1 im1 = m.new IM1();
IM2 im2 = m.new IM2();
IM3 im3 = m.new IM3();
IM4 im4 = m.new IM4();
IM5 im5 = m.new IM5();
new Thread(im1).start();
new Thread(im2).start();
FutureTask<Long> task = new FutureTask<>(im3);
new Thread(task).start();
Long aLong = task.get();
System.out.println("futuretask 执行结果"+aLong);
im4.streamOp();
im5.t();
}
}
执行结果

image.png