多线程理解与运用【笔记篇】

多线程使用

线程是系统调度的基本单位,多线程,提高了多核CPU的利用率

创建线程

两种创建线程的方式集成Thread和实现Runnable接口

继承Thread类

重写run方法
start开启线程

继承Thread原理

Thread可以新建单独的执行路径

多线程异常

线程出现异常,结束当前线程

多线程安全问题

产生原因:
1.共享资源
2.对共享资源操作有多条操作
解决思路:
同步
注意:锁是同一个
同步好处:解决多线程安全问题
同步弊端:降低程序性能(为了安全可以选择降低性能)
降低同步的低效率问题,加双重判断
同步函数和同步代码块
同步函数的锁是固定this
同步代码块可以是任意(需要多个锁时使用)
run方法加synchronized,等于单线程
同步的区分是通过锁区分
静态同步函数使用的锁
字节码文件对象 XXX.class

死锁

死锁原因:互相拿到对方的锁
手写死锁

多线程提高:生产消费

等待唤醒
wait()
this等待的会放在this的线程池中,且只能this才能notify()
notify()
notifyAll()
多生产多消费一定是while循环
添加while后死锁:原因是,生产者唤醒了生产者的线程
解决方案:notifyAll();JDK1.5以后的解决方案Locks
Condition
await signal signalAll

多线程低效率解决方案
A唤醒B的线程

多生产多消费多线程应用实例

守护线程
setDaemon标记为守护线程
后台进程
前台进程都结束,后台线程自动结束

优先级
setPriority
1-10
数字越大,优先级越高
默认5

线程组
对线程统一操作

线程可以自定义名称

join抢夺执行权,结束后还回执行权
yield暂停当前线程,让出执行权

面试题

  1. run和start的区别
    run是方法执行
    start是开启线程

  2. 实现Runnable接口和Thread的区别(接口和继承的区别)
    1.避免单继承局限性
    2.更符合面向对象的思想,线程和任务区分开,可以封装任务对象

  3. sleep和wait的区别
    同:让线程处于冻结状态
    异:
    1.sleep必须指定时间,wait可以指定时间,也可以不指定
    2.wait必须要唤醒(notify)
    3.wait必须定义在同步中
    4.wait立马释放锁,sleep不释放锁(因为sleep一定会醒)

  4. 线程的停止
    stop已过时
    实质,run方法结束,定义标记
    interrupt:清楚冻结状态,恢复运行状态,在异常信息中改变标记

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值