线程创建的几种方式
继承Thread类
实现Runable接口
实现Callable接口
线程池创建
runnable和callable
runable线程创建后没有返回值,callable有返回值
runable不能抛出异常,callable可以抛出异常
Runnable可以直接传递给Thread对象执行;Callable不可以,Callable执行可以放在FutureTask中,然后把futureTask传递给Thread执行
线程的生命周期
-
线程创建时会进入创建的就绪状态
-
执行start的时候进入可运行的状态
-
线程执行完程序后或者中断程序,线程就进入死亡的状态
-
当线程进入运行中的状态,被其余线程抢占,此时该线程进入礼让,就会进入阻塞的状态(onotify唤醒线程)
-
当线程唤醒以后就进入就绪的状态
lock锁与sysc锁的区别
- lock互斥同步锁都是可重入锁,好处是可以保证不会死锁,sysc锁不可重入
- 通过Lock可以知道有没有成功获取锁和锁的状态,syn不可以
- lock是一个接口,syn锁是关键字
创建线程池有哪几个核心参数
corePoolSize 核心线程数大小
maximumPoolSize 线程最大容纳线程的大小
keepAliveTime 空闲线程的空闲时间
unit 空闲时间单位
ThreadFactory 线程工厂
workQueue 缓存异步工作队列
RejectedExecutionHandler 拒绝线程的拒绝策略
线程池的好处
- 降低资源的消耗,重复利用自己创建的线程池降低线程的创建和销毁
- 提高响应速度,当任务到达时,不需要等待线程的创建才能执行任务
- 提高线程的管理性