Java并发(6):创建线程、线程池
1 创建线程方式
public interfact Runnable{ |
1.1 实现runnable接口
创建一个类实现Runnable接口,实现run方法,然后创建Thread类的实例,将实现了Runnable接口的对象作为参数传递给Thread的构造方法,并调用start方法启动线程。
-
将任务代码移到实现了Runnable接口的类的run方法中(由于Runnable 是一个函数式接口,可以用lambda 表达式建立一个实例)
-
用
Runnable
创建一个Thread
对象 -
启动线程
public class demo1 { |
1.2 继承Thread类
创建一个类继承自Thread类,并重写run方法,然后创建该类的实例并调用start方法启动线程。
class Thread implements Runnable{ |
1.3 实现Callable接口
public interface Callable<V>{ |
-
继承Callable实现call方法
-
FutureTask包装器将Callable转换成Future和Runnable
public class CallableDemo implements Callable<String> { |
2 线程池
2.1 newCachedThreadPool
创建一个可缓存的线程池,线程池的大小可根据需要进行自动扩展,但在某些情况下可能会回收线程。
ExecutorService executor = Executors.newCachedThreadPool(); |
2.2 newFixedThreadPool
创建一个固定大小的线程池,线程数始终保持不变。
2.3 newSingleThreadExecutor
-
创建一个单线程的线程池,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。
2.4 newScheduledThreadPool
-
创建一个定时执行任务的线程池。