java多线程学习总结

  • 线程的实现方式

1:继承thread类

2:实现Runable接口

3:实现callbale接口 一般搭配线程池使用。

二、thred和runable接口的区别

1:使用runable接口避免了java单根继承的局限性

2:适合多个相同程序代码去处理同一段代码

3:可以直接用于线程池

4:增加程序的健壮性,代码被多个线程共享

三、线程的状态

新建-就绪(调用start方法)-运行(获取cpu)-阻塞-死亡

1:线程阻塞

等待阻塞:调用wait方法会释放锁

同步阻塞:获取对象同步锁时,该对象同步锁被其他对象所占用

其他阻塞:调用sleep jion方法 进行io操作 sleep方法不会释放对象锁

  • 线程调度

1:线程的优先级默认 nom-priority 5 max-10 min 1

2:wait 和notify 方法 调用wait方法线程进入阻塞状态可以设置时间,是object方法,当另一个线程调用notyfy方法时会从阻塞的方法中随机选择一个进入可运行状态。

3:join方法等待其他线程中止当前线程才由阻塞状态变为就绪状态,常用于主线程等待子线程中止。

4:sleep方法thred的类方法,可设置时间,不会释放锁当时间结束时由阻塞状态变为就绪状态

5:yield方法 和sleep方法不同,不可设置时间,调用后线程由运行状态变为可运行状态,目的是让优先级相同的线程之间可以轮转运行。但是可能运行的线程还是该线程。

SetPirority设置线程的优先级 getpirority 获得线程的优先级

  • synchronized和lock的区别

1:层次上synchronized是jvm类型的lock是类锁

2:锁的释放 synchronized 线程执行完成释放锁,执行异常jvm会让线程释放锁 lock必须在finally中释放,否则会造成死锁

3:synchronized锁状态无法判断 lock可以判断

  • lock的用法
  1. luck()获取锁,如果锁被占用就一直等待
  2. Unlock()释放锁,一般在finally使用若不释放锁会造成死锁
  3. Trylock()获取锁时锁被占用则返回false否则返回true

4、tryLock(long time, TimeUnit unit):比起tryLock()就是给了一个时间期限,保证等待参数时间

5、lockInterruptibly():用该锁的获得方式,如果线程在获取锁的阶段进入了等待,那么可以中断此线程,先去做别的事

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值