2021-06-15

##多线程
1.线程的创建方式
集成Thread,重写Run方法
实现runnable接口,重写run方法
实现callable接口,重写call方法,相对于runnable,可以声明返回值类型
区别
1.Thread方式,最为简单,可以通过this获取当前线程,但是因为继承了Thread类,就不能在继承其他类了
2.Runnbale方式.,子类实现这个接口,可以继承其他类,多个线程可以共享一个target对象,没有返回值
3.callable方式,子类实现这个接口,可以继承其他的类,读个线程可以共享同一个target对象,有返回值

wait() yield()和sleep()的区别
sleep属于Thread类,指定休眠时间,不会释放锁,到时间后会自动执行
yield:不指定时间,礼让优先高级的线程执行,也不会释放锁,当别的线程执行完毕后,如果没有优先级更高的线程需要执行,继续执行当前线程,否则继续抢占CPU资源
wait属于object类,一般不指定时间,释放锁,需要时间调用notify或notifyall方法唤醒,才能继续执行

进程:系统进行资源分类和调度的一个独立单位
线程:是比进程更小的课独立运行的基本单位,一般处于进程当总,可以看做是轻量级的进程

Thread.sleep和不调用sleep的区别
如果线程中没有调用sleep方法,只要有CPU控制权,线程会一直将执行模块中的逻辑执行完成,如果调用了sleep方法,将水面时间设置为0秒,虽然休眠时间为0,且sleep方法并不会释放锁,但任需要重新抢占CPU的使用权,.系统知识默认为休眠的时间到了

线程的两个核心:JMM内存模型 , hasppens-before
三个特性:
1.原子性:即一个操作要么全部执行,要么全部都不执行
2.可见性:当多个线程并发访问共享变量时,一个线程对共享变量的修改,其他线程能够立即看到
3.有序性:程序执行的顺序按照代码的先后顺序执行

死锁:静态的锁顺序死锁,动态锁顺序死锁,写作对象之间的死锁,在写代码时,要确保线程在获取多个锁是采用一直的顺序.同时,要避免在是有锁的情况下调用外部方法

线程池的优势
1.降低系统资源消耗,通过重用已存在的线程创建和销毁造成的消耗
2.提高系统响应速度,当有任务到达时,无序等待新线程的创建便能立即执行
3.方便线程并发数的管控,线程若是无限制的创建,不仅会消耗额外大量系统资源,更是占用过多资源而阻塞系统或oom等状况,从而降低系统的稳定性,线程池能有效管控线程,统一分配,调优,提高资源使用率
4.更强大的功能,线程池提供了定时,定期以及可控制线程数等功能的线程池,使用方便

线程池的执行原理
1.如果在线程池中的线程数量没有达到核心的线程数数量,这时候就会启动一个核心线程来执行任务
2.如果线程池中的线程数量已经超过核心线程数,这时候任务就会被插入到任务队列中排队的等待执行
3.由于任务队列已满,会立即启动一个非核心线程来执行任务
4.如果线程池中的数量达到了所规定的最大值,那么就会拒绝执行此任务,这时候就会调用RdidctedExectutioHandler中的rejectedExecution方法来通知调用者

四种线程池
1.nreFixedThreadPool:所有任务到在核心线程中执行,且核心线程一旦创建,及时任务执行完成,后期一直处于闲置状态,也不会销毁,线程池会一直对这个线程进行维护,知道线程池关闭,如果所有的核心线程都处于活动状态,新加入的任务会被放到linkedblockinfqueue这个队列当中,且这个队列没有大小限制,因为核心线程创建和不会被销毁,当新的任务加入时,不需要重新创建线程来执行新的任务,所以相应速度非常快,但是因为核心线程不会销毁,如果长时间处于闲置状态,消耗资源,所以这种线程池一般用于不会有太多任务执行的场景下

2.newCachedThreadPool:相当于对threadpoolexcutor的一个封装,他的核心线程数量为0,最大线程数量是integer.MAX_VALUE,线程对于线程的维护时间是60秒,如果有新的任务,线城市会去内部寻找是否有闲置线程,如果有将任务分发给该线程没如果没有,创建一个非核心线程去执行,当任务执行完成后,线程会等待60秒,如果没有新的任务,将销毁线程因为最大线程数是一个非常庞大的值,且对于长时间未接受新任务的线程,会回收,所以基本不会达到最大线程的数量,所以内部传入的队列相当于一个空集合,不会使用

3.newScheduledThreadPool:是一个可定时执行或周期执行任务的线程池,对于非核心线程,执行完毕后会立马回收

4.newSinfleThreadPool这个线程池当中只有一个核心线程,且对打也是1个,同时只能执行一个任务.其他所有任务都放在阻塞队列中,且这个队列没有大小限制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值