从零开始学springboot-多线程
最简单的线程
继承Thread类
//继承Thread类,重载run方法
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("Start Thread");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("MyThread sleep 5S End");
}
}
@RestController
@RequestMapping("/thread")
public class StartThread {
@RequestMapping("/thread")
public String thread(){
//start启动线程
new MyThread().start();
return "thread";
}
}
实现Runnable接口
//实现Runnable接口,重载run方法
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Start runnable");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("MyRunnable sleep 5S End");
}
}
@RestController
@RequestMapping("/thread")
public class StartThread {
@RequestMapping("/runnable")
public String runnable(){
//new 一个runnable,start任务
MyRunnable a= new MyRunnable();
new Thread(a).start();
return "runnable";
}
}
线程池使用
线程池介绍
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService
关键类说明:
ExecutorService
真正的线程池接口。
ScheduledExecutorService
能和Timer/TimerTask类似,解决那些需要任务重复执行的问题。
ThreadPoolExecutor
ExecutorService的默认实现。
ScheduledThreadPoolExecutor
继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现。
Java通过Executors提供四种线程池,分别为:
1,newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2,newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线