线程、线程池、引用及volatile与synchronized的区别

线程池

初始化线程池
newFixedThreadPool() 初始化指定大小,即使没有可执行任务也不会释放线程。阻塞队列:LinkedBlockingQueue
newCachedThreadPool() 初始化可以缓存的线程池,默认缓存60s。没有任务执行时线程的空闲时间超过keepAliveTime会自动释放线程资源,提交新任务时若没有空闲线程则创建新线程,要控制并发任务数,防止降低性能。阻塞队列:SynchronousQueue
newSingleThreadExecutor() 初始化只有一个线程的线程池。阻塞队列:LinkedBlockingQueue
newScheduledThreadPool() 初始化的线程池在指定时间周期性提交任务。可用来定期同步数据。
ExecutorService service = new newCachedThreadPool();

corePoolSize
当前线程数=corePoolSize 阻塞,阻塞队列满时创建新线程,直至macPoolSize,再来任务时,执行reject()。

为什么引入Executor线程池框架?

new Thread() 的缺点

每次 new Thread() 耗费性能
调用 new Thread() 创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。
不利于扩展,比如如定时执行、定期执行、线程中断
采用线程池的优点

重用存在的线程,减少对象创建、消亡的开销,性能佳
可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
提供定时执行、定期执行、单线程、并发数控制等功能

volatile与synchronized的区别

1.volatitle不能保证原子性 synchronized可以
2.volatitle是轻量级,修饰变量,可以保证数据可见性,synchronized重量级,可以保证原子性,可以修饰方法和代码块。
3.volatitle不可以用来同步,不会阻塞。
synchronized=可见性+原子性=线程安全性

引用

强引用 Object object = new Object();
软引用 内存不够时回收
Object object = new Object();
SoftReference sf = new SoftReference(object);
obj = null;
弱引用 WeakReference we = new WeakReference(object);
虚引用 PhantomReference pf = new PhantomReference(object);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值