当前位置:网站首页 > 编程语言 > 正文

阻塞队列最多几个进程(阻塞队列最多几个进程啊)



目录

使用锁的原因:

锁:

问题一:锁必须是成对出现的,使用try finally

问题二:使用while而不是if的原因:

问题三:死锁:

进程的创建方式:

单锁实现:

双锁实现:


1.用锁保证线程安全 ReentrantLock lock=new ReentrantLock(); 2.用条件变量 让poll和offer进入等待,而不是不断的循环尝试,让cpu空转 Condition tailWaits = lock.newCondition();//条件变量对象 类似于集合 阻塞进程的存储 
AtomicInteger size=new AtomicInteger();//原子整数类 size.getAndIncrement() //类似于size++ 先使用后自增
 1.synchronized 关键字,功能少 * 2.ReentrantLock 可重入锁

lock.lock()//1.加锁  或者 lock.lockInterruptibly();//2.上锁,其他进程在等待时,可打断,会抛出异常

try{

....

}finally{

lock.unlock()//解锁

}

多个线程加锁,只会让一个线程加锁成功
while(isFull()){ //从tailWaits中唤醒进程,会与新来的offer的线程争夺,如果后者抢到,则会导致在已满的情况下,继续执行(虚假唤醒),所以改为while tailWaits.await();//当前线程加入集合,并阻塞当前线程 等待tailWaits.signal()唤醒 }
死锁:offer进程先获得了tailLock锁,想要唤醒headWaits.signal()之前, * 另一个进程poll线程获得了headLock锁,想要唤醒tailWaits.signal()之前 * 二者想要获得的第二把锁被对方所拿,所以会死锁 * 解决办法: * 把锁写成平级关系即可

一:

new Thread(()->{queue.offer("e1"),"t1").start(); //线程t1的值为e1

二:

new Thread(()-> { try { queue.offer("e1"); } catch (InterruptedException e) { throw new RuntimeException(e); } },"t1").start();
 
 

到此这篇阻塞队列最多几个进程(阻塞队列最多几个进程啊)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 最终幻想7战斗系统攻略(最终幻想7全战斗报告)2025-01-23 23:18:07
  • 高血压危险分层图片(高血压危险分层的意义是什么)2025-01-23 23:18:07
  • nvme与sata(nvme与sata接口的区别)2025-01-23 23:18:07
  • 划词翻译插件有没有破解版的啊(划词翻译插件有没有破解版的啊)2025-01-23 23:18:07
  • 虚拟机安装需要多大空间(装虚拟机的电脑需要多大的内存)2025-01-23 23:18:07
  • Pathlib文档(pathlib获取文件名)2025-01-23 23:18:07
  • 瓦罗兰特代码84(瓦罗兰特代码怎么用)2025-01-23 23:18:07
  • windows的基本操作(windows的基本操作有什么)2025-01-23 23:18:07
  • 广度优先搜索策略流程(广度优先搜索一般使用什么结构)2025-01-23 23:18:07
  • 如何查看域名解析的ip(怎么查看域名解析的ip)2025-01-23 23:18:07
  • 全屏图片