惠普(HP) 认领
计算机/互联网/通信/电子 北京 1-10人 外资(非欧美)
ReentrantLock实例化<br> ReentrantLock有个属性sync,实际上对Lock接口的实现都是包装了一下这个sync的实现<br> 如果是公平模式则创建一个FairSync对象,否则创建一个NonfairSync对象,默认是不公平模式<br>1. lock() 调用sync.lock()<br> 公平模式下:直接走AQS的acquire函数,此函数的逻辑走一次tryAcquire,如果成功<br> 线程拜托同步器的控制,否则加入NODE链表,进入acquireQueued的tryAcquire,休眠,被唤醒的轮回<br> 不公平模式下和公平模式下逻辑大体上是一样的,不同点有两个:<br> a. 在执行tryAcquire之前的操作,不公平模式会直接compareAndSetState(0, 1)原子性的设置AQS的资源<br> 0表示目前没有线程占据资源,则直接抢占资源,不管AQS的NODE链表的FIFO原则
ReentrantLock实例化<br><br> ReentrantLock有个属性sync,实际上对Lock接口的实现都是包装了一下这个sync的实现<br><br> 如果是公平模式则创建一个FairSync对象,否则创建一个NonfairSync对象,默认是不公平模式<br><br>1. lock() 调用sync.lock()<br><br> 公平模式下:直接走AQS的acquire函数,此函数的逻辑走一次tryAcquire,如果成功<br><br> 线程拜托同步器的控制,否则加入NODE链表,进入acquireQueued的tryAcquire,休眠,被唤醒的轮回<br><br> 不公平模式下和公平模式下逻辑大体上是一样的,不同点有两个:<br><br> a. 在执行tryAcquire之前的操作,不公平模式会直接compareAndSetState(0, 1)原子性的设置AQS的资源<br><br> 0表示目前没有线程占据资源,则直接抢占资源,不管AQS的NODE链表的FIFO原则
正在加载验证码...
惠普(HP)Java面试经验&面试问题
面试问题
ReentrantLock实例化<br> ReentrantLock有个属性sync,实际上对Lock接口的实现都是包装了一下这个sync的实现<br> 如果是公平模式则创建一个FairSync对象,否则创建一个NonfairSync对象,默认是不公平模式<br>1. lock() 调用sync.lock()<br> 公平模式下:直接走AQS的acquire函数,此函数的逻辑走一次tryAcquire,如果成功<br> 线程拜托同步器的控制,否则加入NODE链表,进入acquireQueued的tryAcquire,休眠,被唤醒的轮回<br> 不公平模式下和公平模式下逻辑大体上是一样的,不同点有两个:<br> a. 在执行tryAcquire之前的操作,不公平模式会直接compareAndSetState(0, 1)原子性的设置AQS的资源<br> 0表示目前没有线程占据资源,则直接抢占资源,不管AQS的NODE链表的FIFO原则
面试过程
ReentrantLock实例化<br><br> ReentrantLock有个属性sync,实际上对Lock接口的实现都是包装了一下这个sync的实现<br><br> 如果是公平模式则创建一个FairSync对象,否则创建一个NonfairSync对象,默认是不公平模式<br><br>1. lock() 调用sync.lock()<br><br> 公平模式下:直接走AQS的acquire函数,此函数的逻辑走一次tryAcquire,如果成功<br><br> 线程拜托同步器的控制,否则加入NODE链表,进入acquireQueued的tryAcquire,休眠,被唤醒的轮回<br><br> 不公平模式下和公平模式下逻辑大体上是一样的,不同点有两个:<br><br> a. 在执行tryAcquire之前的操作,不公平模式会直接compareAndSetState(0, 1)原子性的设置AQS的资源<br><br> 0表示目前没有线程占据资源,则直接抢占资源,不管AQS的NODE链表的FIFO原则