Synchronized 和线程池篇
Synchronized关键字
-
修饰static方法为类锁,修饰普通方法为对象锁。 如果传入为this为对象锁,如果传入为 *.class为类锁。 对象锁只有为同一个对象的时候才生效,类锁为同一个类的时候才生效。但是类锁和对象锁互不影响。 对象在内存中的布局:对象头、实例数据、对齐填充
线程池
-
线程池的父级接口:Executor 五种常用线程池的工具创建类:Excutors 真正的创建类为ThreadPoolExecutor newFixedThreadPool
corePoolSize = n maximumPoolSize = n KeepAliveTime = 0L workQueue = LinkedBlockQueue
特点为固定线程池大小,缺点线程较多的时候会导致队列等待线程较多,造成OOM
-
newCacheThreadPool
corePoolSize = 0 maximumPoolSize = Integer.MAX_VALUE keepAliveTime = 60L unit = SECOND workQueue = SynchronousQueue
特点为线程池可动态扩展,当线程池的线程不够的时候,会创建线程,当空闲线程超过时间的时候,会回收线程。 缺点:最大线程数量为Interger.MAX_VALUS,运行线程过多的时候会OOM
-
newScheduledThreadPool 特点为创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor 单线程线程池,单线程执行,保证按一定的顺序执行(FIFO 、LIFO 、以及优先级) 等待队列包括:ArrayBlockQueue、LinkedBlockQueue、SynchronousQueue、PriorityBlockQueue 四种饱和策略:指当限定的队列已达饱和状态,并且指定的线程都已开启。
AbortPolicy : 拒绝所有服务,直接抛异常 CallerRunsPolicy : 只用调用者所在的线程来执行任务 DiscardPolicy : 不处理,直接丢弃掉任务 DiscardOldestPolicy : 丢弃掉阻塞队列中存放时间最久的任务,执行当前任务
上一篇:
Java基础知识总结(2021版)
下一篇:
金三银四百度前端实习面经