多线程(狂神说java)学习日记4

关于synchronized

同步方法:当它锁的是一个方法的时候,当第一个线程调用该方法时候,锁住,这样第二个线程必须等第一个线程调用完后(也就是该方法return后),才能再调用

同步块:注意监视的对象是需要增删改查的对象

第一个线程访问,锁定同步监视器,执行其中代码
第二个线程访问,发现同步监视器被锁定,无法访问
第一个线程访问完毕,解除同步监视器
第二个线程访问,发现同步监视器没有锁,执行其中代码

P22 死锁

某一个同步块同时有两个以上对象的锁,就可能出现死锁

通俗来讲,两个线程都在等待对方释放资源,例如线程A拥有资源a,B拥有b,线程A想要资源b,而B想要a,这个时候AB都在等待对方先释放资源,然后就会停止执行。

产生死锁的四个必要条件:
1.互斥条件:一个资源每次只能被一个进程使用。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

女1线程,先获得口红,3秒后想获得镜子,女2线程,先获得镜子,2秒后想获得口红。这里的2秒3秒保证了两个线程都先获得一个基本资源,女1:口红;女2:镜子,后面就开始想获取对方的资源,然后就会卡死

解除方法,把同步块拿出来,不同时获得两把锁

P23 lock锁

不加锁

加锁(解除注释)

P27线程池

比较简单的创建方式:

TimeUnit时间单位

ThreadFactory 用来增加线程

当任务进来

先看核心线程是否满

     1,没满开始执行;2,满了就看任务队列

再看任务队列

  1. 没满添加到队列中;2,满了看最大线程

看最大线程

     1,没满,增加线程数来执行任务;2,满了,看拒绝策略

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值