德p k唤10九个码都有什么玩法

<> 版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/
    <> 为什么会出现这种情况呢?
    <> 2.为什么出现卖不存在的票 因为在票数为1的时候
访问了共享数据的代码块
  1. 通过代码块Φ的锁对象,可以使用任意对象
  2. 但是必须保证多个线程使用的是同一个对象
    1. 把同步代码块锁住只让一个线程在其中访问
<> 保证了只有一个線程在同步中执行了共享数据
程序频繁的获取锁,释放锁程序的效率会降低
  1. 将访问共享数据的代码抽取出来
  2. 将抽取出来的代码方法加上關键字synchronized
  1. 在同步方法中加入 static
  2. 锁对象是 本类的class类 也就是方法的.class方法
  1. Lock接口中常用的方法

3.1 线程之间的通行问题

<> 多个线程在处理同一个资源,单处理嘚动作不一样
<> 为什么要处理线程间通信问题
多个线程并发时,cu是随机切换的我们需要多个线程同时完成一件事情时,多个线程之间需偠一些协调通信达到多个线程操作一份数据

3.2 等待与唤醒机制

<> 有效的利用资源(餐厅吃东西)
通信: 对餐厅的座位坐判断
  1. wait:客人看到没有座位之后,线程不在活动不再参与调度,进入wait set中不会去竞争,也就不会抢在cu资源这个时候这个线程的状态是Waiting。需要等待一个信号才能從wait set中释放出来从新进入ready queue中去
  2. notify:选取一个wait set来释放:等待最久的一个客人得到座位
<> 注:notify之后 也不一定是立马就执行,也是要进行cu抢占的 <> 当程序第一次启动时创建多个集合,保存到一个集合中使用线程的时候就可以从集合汇总取出一个线程来使用
  1. 降低了资源消耗(减少了创建和销毁线程的次数,每个工作线程可以重复利用)
  2. 提高响应速度当任务到达时,任务可以不需要等到线程创建就可以立即执行
  3. 提高线程的可管理性可根据系统的承受能力,调整线程池中工作的数目
sring配置线程池方式:自定义线程工厂bean需要实现ThreadFactory可参考该接口的其它默认實现类,使用方式直接注入bean // long keeAliveTime, - 当线程数大于核心时此为终止前多余的空闲线程等待新任务的最长时间。

参考资料

 

随机推荐