首页 > 编程知识 正文

java延迟队列实现原理,java代码块加锁

时间:2023-05-03 23:17:55 阅读:31484 作者:192

一.线程状态流程

说明:

线程有五种状态:

创建新状态(New ) :线程对象后,它将变为新状态。 例如,Thread thread=new Thread ()。 就绪状态(Runnable ) :也称为“可执行状态”。 创建线程对象后,其他线程调用该对象的start ()方法并启动线程。 例如,thread.start ()。 处于就绪状态的线程可能随时由CPU计划运行。 运行状态(运行) :线程获取并运行CPU权限。 需要注意的是,线程只能从就绪状态进入运行状态。 块状态(已阻止) :块状态是线程由于某些原因放弃CPU使用权而暂时停止的状态。 在线程进入就绪状态之前,没有机会进入运行状态。 区块情况可分为三种:

(01 )等待块线程等待)通过调用方法,让线程等待某项工作完成。

) 02 )同步块-未能获取同步锁定的线程将处于同步块状态,因为其他线程正在占用锁定。

) 03 )其他块调用线程的sleep (或join )或发出I/O请求时,线程将处于阻止状态。 当“sleep (状态超时时,连接)”)等待线程结束或超时,或者I/O操作完成时,线程将返回就绪状态。 由于暂存(Dead ) :线程执行已完成或run )方法异常终止,线程已终止其生命周期。 线程状态流中的阻塞:同步阻塞和等待阻塞分别对应于同步队列和等待队列。

同步阻塞:如果在进入同步方法块(同步方法)时冲突锁定失败,则进入同步队列

阻止等待:例如,如果线程调用wait ()方法,则线程将进入等待队列,在唤醒后等待进入同步队列

二、Java锁的同步队列和等待队列Java的锁可以分为同步、AQS两类。

同步是隐式锁定,通过内部对象监视器锁定(Monitor )实现。 特别是由JVM中的c代码实现的,有同步队列和等待队列。

AQS是一个显示锁,在CAS、LockSurpport和CLH双向链表中实现,在java代码中实现。 同步队列,有多个等待队列。 如果使用Condition,则在调用Condition的await方法时,当前线程将进入队列。 队列唤醒是调用Condition的signal方法。 AQS可以设置多个Condition,并且可以有多个队列。

AQS的同步队列和等待队列如下图所示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。