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

阻塞队列最多几个进程(阻塞队列最多几个进程啊)p id main toc strong 目录 strong p 使用锁的原因 锁 问题一 锁必须是成对出现的 使用 try finally 问题二 使用 while 而不是 if 的原因 问题三 死锁 进程的创建方式 单锁实现 双锁实现 1 用锁保证线程安全 ReentrantLoc

大家好,我是讯享网,很高兴认识大家。



 <p id="main-toc"><strong>目录</strong></p> 

讯享网

使用锁的原因:

锁:

问题一:锁必须是成对出现的,使用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(()-&gt;{queue.offer(“e1”),“t1”).start(); //线程t1的值为e1

二:

讯享网new Thread(()-&gt; {

 try { queue.offer(&#34;e1&#34;); } catch (InterruptedException e) { throw new RuntimeException(e); } },&#34;t1&#34;).start();</pre> 
讯享网

 
    


小讯
上一篇 2025-06-08 22:25
下一篇 2025-06-12 09:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/165472.html