- 创建线程的三种方式:继承 Thread; Runnable 接口;Callable 和 Future
- 线程的五种基本状态:新建;就绪;运行;阻塞;死亡
- 阻塞队列:ArrayBlockingQueue(有界阻塞队列);LinkedBlockingQuene(无界阻塞队列);SynchronousQuene(零容量阻塞队列,生产者线程的插入操作必须等待消费者线程的移除操作);PriorityBlockingQueue(优先级的无界阻塞队列);DelayedWorkQueue(延时无界阻塞队列)
- 线程池:ThreadPoolExecutor -> ExecutorService
- Executors
- newCachedThreadPool 适用于执行大量短暂异步任务的应用程序:SynchronousQuene & 核心线程数为 0
- newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数:LinkedBlockingQueue & 核心线程数=最大线程数
- newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行:DelayedWorkQueue
- newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务:LinkedBlockingQueue & 核心线程数1 最大线程数1
- Executors 的问题
- FixedThreadPool 和 SingleThreadPool 允许的请求队列长度为 Integer.MAX_VALUE ,可能会堆积大量的请求,从而导致 OOM
- CachedThreadPool 和 ScheduledThreadPool 允许的创建线程数量为 Integer.MAX_VALUE ,可能会创建大量的线程,从而导致 OOM
- wait 和 sleep 方法的区别
- sleep 是 Thread 的方法,wait是 Object 的方法
- sleep方法没有释放锁,而 wait 方法释放了锁
- wait,notify 和 notifyAll 只能在同步控制方法或者同步控制块里面使用,而 sleep 可以在任何地方使用
- sleep 必须捕获异常,而 wait,notify 和 notifyAll 不需要捕获异常
上一篇
Java面试-分布式-基础
2024-06-13
下一篇
maven 上传到中心仓库
2024-05-07