线程的实现方式:
-
Thread:继承线程类,重写run方法
-
Runnable:类实现接口,实现run方法
-
Callable:实现此接口,重写call方法,此方法有返回值,能抛出异常
ThreadLocal和synchronized:
-
都用于解决多线程并发访问
-
synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问
-
ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享
线程池 Executor
-
newSingleThreadExecutor:单个线程的线程池
-
newFixedThreadExecutor:固定数量
-
newCacheThreadExecutor:可缓存线程池
-
newScheduleThreadExecutor:大小无限制的线程池
- ThreadPoolExecutor:一般要用它线程创建,阿里巴巴手册说的
new ThreadPoolExecutor(10,10,60L,TimeUnit.SECONDS,new ArrayBlockingQueue(10));
-
corePoolSize:核心线程数量,会一直存在,除非allowCoreThreadTimeOut设置为true
-
maximumPoolSize:线程池允许的最大线程池数量
-
keepAliveTime:线程数量超过corePoolSize,空闲线程的最大超时时间
-
unit:超时时间的单位
-
workQueue:工作队列,保存未执行的Runnable 任务
-
threadFactory:创建线程的工厂类
-
handler:当线程已满,工作队列也满了的时候,会被调用。被用来实现各种拒绝策略