日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java Lock 源码分析

發布時間:2023/12/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java Lock 源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 中的lock 先關的類路徑:


Lock 是個接口,源碼:

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;public interface Lock {void lock();void lockInterruptibly() throws InterruptedException;boolean tryLock();boolean tryLock(long var1, TimeUnit var3) throws InterruptedException;void unlock();Condition newCondition(); }

使用lock 要具體使用lock 的實例類

ReentrantLock

ReentrantReadWriteLock

ReentrantLock 代碼:

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package java.util.concurrent.locks;import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.Collection; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject;public class ReentrantLock implements Lock, Serializable {private static final long serialVersionUID = 7373984872572414699L;private final ReentrantLock.Sync sync;public ReentrantLock() {this.sync = new ReentrantLock.NonfairSync();}public ReentrantLock(boolean var1) {this.sync = (ReentrantLock.Sync)(var1 ? new ReentrantLock.FairSync() : new ReentrantLock.NonfairSync());}public void lock() {this.sync.lock();}public void lockInterruptibly() throws InterruptedException {this.sync.acquireInterruptibly(1);}public boolean tryLock() {return this.sync.nonfairTryAcquire(1);}public boolean tryLock(long var1, TimeUnit var3) throws InterruptedException {return this.sync.tryAcquireNanos(1, var3.toNanos(var1));}public void unlock() {this.sync.release(1);}public Condition newCondition() {return this.sync.newCondition();}public int getHoldCount() {return this.sync.getHoldCount();}public boolean isHeldByCurrentThread() {return this.sync.isHeldExclusively();}public boolean isLocked() {return this.sync.isLocked();}public final boolean isFair() {return this.sync instanceof ReentrantLock.FairSync;}protected Thread getOwner() {return this.sync.getOwner();}public final boolean hasQueuedThreads() {return this.sync.hasQueuedThreads();}public final boolean hasQueuedThread(Thread var1) {return this.sync.isQueued(var1);}public final int getQueueLength() {return this.sync.getQueueLength();}protected Collection<Thread> getQueuedThreads() {return this.sync.getQueuedThreads();}public boolean hasWaiters(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.hasWaiters((ConditionObject)var1);}}public int getWaitQueueLength(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.getWaitQueueLength((ConditionObject)var1);}}protected Collection<Thread> getWaitingThreads(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.getWaitingThreads((ConditionObject)var1);}}public String toString() {Thread var1 = this.sync.getOwner();return super.toString() + (var1 == null ? "[Unlocked]" : "[Locked by thread " + var1.getName() + "]");}static final class FairSync extends ReentrantLock.Sync {private static final long serialVersionUID = -3000897897090466540L;FairSync() {}final void lock() {this.acquire(1);}protected final boolean tryAcquire(int var1) {Thread var2 = Thread.currentThread();int var3 = this.getState();if (var3 == 0) {if (!this.hasQueuedPredecessors() && this.compareAndSetState(0, var1)) {this.setExclusiveOwnerThread(var2);return true;}} else if (var2 == this.getExclusiveOwnerThread()) {int var4 = var3 + var1;if (var4 < 0) {throw new Error("Maximum lock count exceeded");}this.setState(var4);return true;}return false;}}static final class NonfairSync extends ReentrantLock.Sync {private static final long serialVersionUID = 7316153563782823691L;NonfairSync() {}final void lock() {if (this.compareAndSetState(0, 1)) {this.setExclusiveOwnerThread(Thread.currentThread());} else {this.acquire(1);}}protected final boolean tryAcquire(int var1) {return this.nonfairTryAcquire(var1);}}abstract static class Sync extends AbstractQueuedSynchronizer {private static final long serialVersionUID = -5179523762034025860L;Sync() {}abstract void lock();final boolean nonfairTryAcquire(int var1) {Thread var2 = Thread.currentThread();int var3 = this.getState();if (var3 == 0) {if (this.compareAndSetState(0, var1)) {this.setExclusiveOwnerThread(var2);return true;}} else if (var2 == this.getExclusiveOwnerThread()) {int var4 = var3 + var1;if (var4 < 0) {throw new Error("Maximum lock count exceeded");}this.setState(var4);return true;}return false;}protected final boolean tryRelease(int var1) {int var2 = this.getState() - var1;if (Thread.currentThread() != this.getExclusiveOwnerThread()) {throw new IllegalMonitorStateException();} else {boolean var3 = false;if (var2 == 0) {var3 = true;this.setExclusiveOwnerThread((Thread)null);}this.setState(var2);return var3;}}protected final boolean isHeldExclusively() {return this.getExclusiveOwnerThread() == Thread.currentThread();}final ConditionObject newCondition() {return new ConditionObject(this);}final Thread getOwner() {return this.getState() == 0 ? null : this.getExclusiveOwnerThread();}final int getHoldCount() {return this.isHeldExclusively() ? this.getState() : 0;}final boolean isLocked() {return this.getState() != 0;}private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {var1.defaultReadObject();this.setState(0);}} }

ReentrantReadWriteLock? ->ReadWriteLock

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package java.util.concurrent.locks;import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.Collection; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject; import sun.misc.Unsafe;public class ReentrantReadWriteLock implements ReadWriteLock, Serializable {private static final long serialVersionUID = -6992448646407690164L;private final ReentrantReadWriteLock.ReadLock readerLock;private final ReentrantReadWriteLock.WriteLock writerLock;final ReentrantReadWriteLock.Sync sync;private static final Unsafe UNSAFE;private static final long TID_OFFSET;public ReentrantReadWriteLock() {this(false);}public ReentrantReadWriteLock(boolean var1) {this.sync = (ReentrantReadWriteLock.Sync)(var1 ? new ReentrantReadWriteLock.FairSync() : new ReentrantReadWriteLock.NonfairSync());this.readerLock = new ReentrantReadWriteLock.ReadLock(this);this.writerLock = new ReentrantReadWriteLock.WriteLock(this);}public ReentrantReadWriteLock.WriteLock writeLock() {return this.writerLock;}public ReentrantReadWriteLock.ReadLock readLock() {return this.readerLock;}public final boolean isFair() {return this.sync instanceof ReentrantReadWriteLock.FairSync;}protected Thread getOwner() {return this.sync.getOwner();}public int getReadLockCount() {return this.sync.getReadLockCount();}public boolean isWriteLocked() {return this.sync.isWriteLocked();}public boolean isWriteLockedByCurrentThread() {return this.sync.isHeldExclusively();}public int getWriteHoldCount() {return this.sync.getWriteHoldCount();}public int getReadHoldCount() {return this.sync.getReadHoldCount();}protected Collection<Thread> getQueuedWriterThreads() {return this.sync.getExclusiveQueuedThreads();}protected Collection<Thread> getQueuedReaderThreads() {return this.sync.getSharedQueuedThreads();}public final boolean hasQueuedThreads() {return this.sync.hasQueuedThreads();}public final boolean hasQueuedThread(Thread var1) {return this.sync.isQueued(var1);}public final int getQueueLength() {return this.sync.getQueueLength();}protected Collection<Thread> getQueuedThreads() {return this.sync.getQueuedThreads();}public boolean hasWaiters(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.hasWaiters((ConditionObject)var1);}}public int getWaitQueueLength(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.getWaitQueueLength((ConditionObject)var1);}}protected Collection<Thread> getWaitingThreads(Condition var1) {if (var1 == null) {throw new NullPointerException();} else if (!(var1 instanceof ConditionObject)) {throw new IllegalArgumentException("not owner");} else {return this.sync.getWaitingThreads((ConditionObject)var1);}}public String toString() {int var1 = this.sync.getCount();int var2 = ReentrantReadWriteLock.Sync.exclusiveCount(var1);int var3 = ReentrantReadWriteLock.Sync.sharedCount(var1);return super.toString() + "[Write locks = " + var2 + ", Read locks = " + var3 + "]";}static final long getThreadId(Thread var0) {return UNSAFE.getLongVolatile(var0, TID_OFFSET);}static {try {UNSAFE = Unsafe.getUnsafe();Class var0 = Thread.class;TID_OFFSET = UNSAFE.objectFieldOffset(var0.getDeclaredField("tid"));} catch (Exception var1) {throw new Error(var1);}}static final class FairSync extends ReentrantReadWriteLock.Sync {private static final long serialVersionUID = -2274990926593161451L;FairSync() {}final boolean writerShouldBlock() {return this.hasQueuedPredecessors();}final boolean readerShouldBlock() {return this.hasQueuedPredecessors();}}static final class NonfairSync extends ReentrantReadWriteLock.Sync {private static final long serialVersionUID = -8159625535654395037L;NonfairSync() {}final boolean writerShouldBlock() {return false;}final boolean readerShouldBlock() {return this.apparentlyFirstQueuedIsExclusive();}}public static class ReadLock implements Lock, Serializable {private static final long serialVersionUID = -5992448646407690164L;private final ReentrantReadWriteLock.Sync sync;protected ReadLock(ReentrantReadWriteLock var1) {this.sync = var1.sync;}public void lock() {this.sync.acquireShared(1);}public void lockInterruptibly() throws InterruptedException {this.sync.acquireSharedInterruptibly(1);}public boolean tryLock() {return this.sync.tryReadLock();}public boolean tryLock(long var1, TimeUnit var3) throws InterruptedException {return this.sync.tryAcquireSharedNanos(1, var3.toNanos(var1));}public void unlock() {this.sync.releaseShared(1);}public Condition newCondition() {throw new UnsupportedOperationException();}public String toString() {int var1 = this.sync.getReadLockCount();return super.toString() + "[Read locks = " + var1 + "]";}}abstract static class Sync extends AbstractQueuedSynchronizer {private static final long serialVersionUID = 6317671515068378041L;static final int SHARED_SHIFT = 16;static final int SHARED_UNIT = 65536;static final int MAX_COUNT = 65535;static final int EXCLUSIVE_MASK = 65535;private transient ReentrantReadWriteLock.Sync.ThreadLocalHoldCounter readHolds = new ReentrantReadWriteLock.Sync.ThreadLocalHoldCounter();private transient ReentrantReadWriteLock.Sync.HoldCounter cachedHoldCounter;private transient Thread firstReader = null;private transient int firstReaderHoldCount;static int sharedCount(int var0) {return var0 >>> 16;}static int exclusiveCount(int var0) {return var0 & '\uffff';}Sync() {this.setState(this.getState());}abstract boolean readerShouldBlock();abstract boolean writerShouldBlock();protected final boolean tryRelease(int var1) {if (!this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {int var2 = this.getState() - var1;boolean var3 = exclusiveCount(var2) == 0;if (var3) {this.setExclusiveOwnerThread((Thread)null);}this.setState(var2);return var3;}}protected final boolean tryAcquire(int var1) {Thread var2 = Thread.currentThread();int var3 = this.getState();int var4 = exclusiveCount(var3);if (var3 != 0) {if (var4 != 0 && var2 == this.getExclusiveOwnerThread()) {if (var4 + exclusiveCount(var1) > 65535) {throw new Error("Maximum lock count exceeded");} else {this.setState(var3 + var1);return true;}} else {return false;}} else if (!this.writerShouldBlock() && this.compareAndSetState(var3, var3 + var1)) {this.setExclusiveOwnerThread(var2);return true;} else {return false;}}protected final boolean tryReleaseShared(int var1) {Thread var2 = Thread.currentThread();int var4;if (this.firstReader == var2) {if (this.firstReaderHoldCount == 1) {this.firstReader = null;} else {--this.firstReaderHoldCount;}} else {ReentrantReadWriteLock.Sync.HoldCounter var3 = this.cachedHoldCounter;if (var3 == null || var3.tid != ReentrantReadWriteLock.getThreadId(var2)) {var3 = (ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get();}var4 = var3.count;if (var4 <= 1) {this.readHolds.remove();if (var4 <= 0) {throw this.unmatchedUnlockException();}}--var3.count;}int var5;do {var5 = this.getState();var4 = var5 - 65536;} while(!this.compareAndSetState(var5, var4));return var4 == 0;}private IllegalMonitorStateException unmatchedUnlockException() {return new IllegalMonitorStateException("attempt to unlock read lock, not locked by current thread");}protected final int tryAcquireShared(int var1) {Thread var2 = Thread.currentThread();int var3 = this.getState();if (exclusiveCount(var3) != 0 && this.getExclusiveOwnerThread() != var2) {return -1;} else {int var4 = sharedCount(var3);if (!this.readerShouldBlock() && var4 < 65535 && this.compareAndSetState(var3, var3 + 65536)) {if (var4 == 0) {this.firstReader = var2;this.firstReaderHoldCount = 1;} else if (this.firstReader == var2) {++this.firstReaderHoldCount;} else {ReentrantReadWriteLock.Sync.HoldCounter var5 = this.cachedHoldCounter;if (var5 != null && var5.tid == ReentrantReadWriteLock.getThreadId(var2)) {if (var5.count == 0) {this.readHolds.set(var5);}} else {this.cachedHoldCounter = var5 = (ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get();}++var5.count;}return 1;} else {return this.fullTryAcquireShared(var2);}}}final int fullTryAcquireShared(Thread var1) {ReentrantReadWriteLock.Sync.HoldCounter var2 = null;int var3;do {var3 = this.getState();if (exclusiveCount(var3) != 0) {if (this.getExclusiveOwnerThread() != var1) {return -1;}} else if (this.readerShouldBlock() && this.firstReader != var1) {if (var2 == null) {var2 = this.cachedHoldCounter;if (var2 == null || var2.tid != ReentrantReadWriteLock.getThreadId(var1)) {var2 = (ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get();if (var2.count == 0) {this.readHolds.remove();}}}if (var2.count == 0) {return -1;}}if (sharedCount(var3) == 65535) {throw new Error("Maximum lock count exceeded");}} while(!this.compareAndSetState(var3, var3 + 65536));if (sharedCount(var3) == 0) {this.firstReader = var1;this.firstReaderHoldCount = 1;} else if (this.firstReader == var1) {++this.firstReaderHoldCount;} else {if (var2 == null) {var2 = this.cachedHoldCounter;}if (var2 != null && var2.tid == ReentrantReadWriteLock.getThreadId(var1)) {if (var2.count == 0) {this.readHolds.set(var2);}} else {var2 = (ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get();}++var2.count;this.cachedHoldCounter = var2;}return 1;}final boolean tryWriteLock() {Thread var1 = Thread.currentThread();int var2 = this.getState();if (var2 != 0) {int var3 = exclusiveCount(var2);if (var3 == 0 || var1 != this.getExclusiveOwnerThread()) {return false;}if (var3 == 65535) {throw new Error("Maximum lock count exceeded");}}if (!this.compareAndSetState(var2, var2 + 1)) {return false;} else {this.setExclusiveOwnerThread(var1);return true;}}final boolean tryReadLock() {Thread var1 = Thread.currentThread();int var2;int var3;do {var2 = this.getState();if (exclusiveCount(var2) != 0 && this.getExclusiveOwnerThread() != var1) {return false;}var3 = sharedCount(var2);if (var3 == 65535) {throw new Error("Maximum lock count exceeded");}} while(!this.compareAndSetState(var2, var2 + 65536));if (var3 == 0) {this.firstReader = var1;this.firstReaderHoldCount = 1;} else if (this.firstReader == var1) {++this.firstReaderHoldCount;} else {ReentrantReadWriteLock.Sync.HoldCounter var4 = this.cachedHoldCounter;if (var4 != null && var4.tid == ReentrantReadWriteLock.getThreadId(var1)) {if (var4.count == 0) {this.readHolds.set(var4);}} else {this.cachedHoldCounter = var4 = (ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get();}++var4.count;}return true;}protected final boolean isHeldExclusively() {return this.getExclusiveOwnerThread() == Thread.currentThread();}final ConditionObject newCondition() {return new ConditionObject(this);}final Thread getOwner() {return exclusiveCount(this.getState()) == 0 ? null : this.getExclusiveOwnerThread();}final int getReadLockCount() {return sharedCount(this.getState());}final boolean isWriteLocked() {return exclusiveCount(this.getState()) != 0;}final int getWriteHoldCount() {return this.isHeldExclusively() ? exclusiveCount(this.getState()) : 0;}final int getReadHoldCount() {if (this.getReadLockCount() == 0) {return 0;} else {Thread var1 = Thread.currentThread();if (this.firstReader == var1) {return this.firstReaderHoldCount;} else {ReentrantReadWriteLock.Sync.HoldCounter var2 = this.cachedHoldCounter;if (var2 != null && var2.tid == ReentrantReadWriteLock.getThreadId(var1)) {return var2.count;} else {int var3 = ((ReentrantReadWriteLock.Sync.HoldCounter)this.readHolds.get()).count;if (var3 == 0) {this.readHolds.remove();}return var3;}}}}private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {var1.defaultReadObject();this.readHolds = new ReentrantReadWriteLock.Sync.ThreadLocalHoldCounter();this.setState(0);}final int getCount() {return this.getState();}static final class HoldCounter {int count = 0;final long tid = ReentrantReadWriteLock.getThreadId(Thread.currentThread());HoldCounter() {}}static final class ThreadLocalHoldCounter extends ThreadLocal<ReentrantReadWriteLock.Sync.HoldCounter> {ThreadLocalHoldCounter() {}public ReentrantReadWriteLock.Sync.HoldCounter initialValue() {return new ReentrantReadWriteLock.Sync.HoldCounter();}}}public static class WriteLock implements Lock, Serializable {private static final long serialVersionUID = -4992448646407690164L;private final ReentrantReadWriteLock.Sync sync;protected WriteLock(ReentrantReadWriteLock var1) {this.sync = var1.sync;}public void lock() {this.sync.acquire(1);}public void lockInterruptibly() throws InterruptedException {this.sync.acquireInterruptibly(1);}public boolean tryLock() {return this.sync.tryWriteLock();}public boolean tryLock(long var1, TimeUnit var3) throws InterruptedException {return this.sync.tryAcquireNanos(1, var3.toNanos(var1));}public void unlock() {this.sync.release(1);}public Condition newCondition() {return this.sync.newCondition();}public String toString() {Thread var1 = this.sync.getOwner();return super.toString() + (var1 == null ? "[Unlocked]" : "[Locked by thread " + var1.getName() + "]");}public boolean isHeldByCurrentThread() {return this.sync.isHeldExclusively();}public int getHoldCount() {return this.sync.getWriteHoldCount();}} }

ReadWriteLock 接口代碼:

package java.util.concurrent.locks;public interface ReadWriteLock {Lock readLock();Lock writeLock(); }

上面的鎖中的同步操作都是調用this.compareAndSetState方法,這個方法是cas 操作。this 是類abstract static class Sync extends AbstractQueuedSynchronizer

看下AbstractQueuedSynchronizer 源碼:

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package java.util.concurrent.locks;import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.concurrent.TimeUnit; import sun.misc.Unsafe;public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements Serializable {private static final long serialVersionUID = 7373984972572414691L;private transient volatile AbstractQueuedSynchronizer.Node head;private transient volatile AbstractQueuedSynchronizer.Node tail;private volatile int state;static final long spinForTimeoutThreshold = 1000L;private static final Unsafe unsafe = Unsafe.getUnsafe();private static final long stateOffset;private static final long headOffset;private static final long tailOffset;private static final long waitStatusOffset;private static final long nextOffset;protected AbstractQueuedSynchronizer() {}protected final int getState() {return this.state;}protected final void setState(int var1) {this.state = var1;}protected final boolean compareAndSetState(int var1, int var2) {return unsafe.compareAndSwapInt(this, stateOffset, var1, var2);}private AbstractQueuedSynchronizer.Node enq(AbstractQueuedSynchronizer.Node var1) {while(true) {AbstractQueuedSynchronizer.Node var2 = this.tail;if (var2 == null) {if (this.compareAndSetHead(new AbstractQueuedSynchronizer.Node())) {this.tail = this.head;}} else {var1.prev = var2;if (this.compareAndSetTail(var2, var1)) {var2.next = var1;return var2;}}}}private AbstractQueuedSynchronizer.Node addWaiter(AbstractQueuedSynchronizer.Node var1) {AbstractQueuedSynchronizer.Node var2 = new AbstractQueuedSynchronizer.Node(Thread.currentThread(), var1);AbstractQueuedSynchronizer.Node var3 = this.tail;if (var3 != null) {var2.prev = var3;if (this.compareAndSetTail(var3, var2)) {var3.next = var2;return var2;}}this.enq(var2);return var2;}private void setHead(AbstractQueuedSynchronizer.Node var1) {this.head = var1;var1.thread = null;var1.prev = null;}private void unparkSuccessor(AbstractQueuedSynchronizer.Node var1) {int var2 = var1.waitStatus;if (var2 < 0) {compareAndSetWaitStatus(var1, var2, 0);}AbstractQueuedSynchronizer.Node var3 = var1.next;if (var3 == null || var3.waitStatus > 0) {var3 = null;for(AbstractQueuedSynchronizer.Node var4 = this.tail; var4 != null && var4 != var1; var4 = var4.prev) {if (var4.waitStatus <= 0) {var3 = var4;}}}if (var3 != null) {LockSupport.unpark(var3.thread);}}private void doReleaseShared() {while(true) {AbstractQueuedSynchronizer.Node var1 = this.head;if (var1 != null && var1 != this.tail) {int var2 = var1.waitStatus;if (var2 == -1) {if (!compareAndSetWaitStatus(var1, -1, 0)) {continue;}this.unparkSuccessor(var1);} else if (var2 == 0 && !compareAndSetWaitStatus(var1, 0, -3)) {continue;}}if (var1 == this.head) {return;}}}private void setHeadAndPropagate(AbstractQueuedSynchronizer.Node var1, int var2) {AbstractQueuedSynchronizer.Node var3 = this.head;this.setHead(var1);if (var2 <= 0 && var3 != null && var3.waitStatus >= 0) {var3 = this.head;if (this.head != null && var3.waitStatus >= 0) {return;}}AbstractQueuedSynchronizer.Node var4 = var1.next;if (var4 == null || var4.isShared()) {this.doReleaseShared();}}private void cancelAcquire(AbstractQueuedSynchronizer.Node var1) {if (var1 != null) {var1.thread = null;AbstractQueuedSynchronizer.Node var2;for(var2 = var1.prev; var2.waitStatus > 0; var1.prev = var2 = var2.prev) {;}AbstractQueuedSynchronizer.Node var3 = var2.next;var1.waitStatus = 1;if (var1 == this.tail && this.compareAndSetTail(var1, var2)) {compareAndSetNext(var2, var3, (AbstractQueuedSynchronizer.Node)null);} else {label37: {if (var2 != this.head) {int var4 = var2.waitStatus;if ((var2.waitStatus == -1 || var4 <= 0 && compareAndSetWaitStatus(var2, var4, -1)) && var2.thread != null) {AbstractQueuedSynchronizer.Node var5 = var1.next;if (var5 != null && var5.waitStatus <= 0) {compareAndSetNext(var2, var3, var5);}break label37;}}this.unparkSuccessor(var1);}var1.next = var1;}}}private static boolean shouldParkAfterFailedAcquire(AbstractQueuedSynchronizer.Node var0, AbstractQueuedSynchronizer.Node var1) {int var2 = var0.waitStatus;if (var2 == -1) {return true;} else {if (var2 > 0) {do {var1.prev = var0 = var0.prev;} while(var0.waitStatus > 0);var0.next = var1;} else {compareAndSetWaitStatus(var0, var2, -1);}return false;}}static void selfInterrupt() {Thread.currentThread().interrupt();}private final boolean parkAndCheckInterrupt() {LockSupport.park(this);return Thread.interrupted();}final boolean acquireQueued(AbstractQueuedSynchronizer.Node var1, int var2) {boolean var3 = true;try {boolean var4 = false;while(true) {AbstractQueuedSynchronizer.Node var5 = var1.predecessor();if (var5 == this.head && this.tryAcquire(var2)) {this.setHead(var1);var5.next = null;var3 = false;boolean var6 = var4;return var6;}if (shouldParkAfterFailedAcquire(var5, var1) && this.parkAndCheckInterrupt()) {var4 = true;}}} finally {if (var3) {this.cancelAcquire(var1);}}}private void doAcquireInterruptibly(int var1) throws InterruptedException {AbstractQueuedSynchronizer.Node var2 = this.addWaiter(AbstractQueuedSynchronizer.Node.EXCLUSIVE);boolean var3 = true;try {AbstractQueuedSynchronizer.Node var4;do {var4 = var2.predecessor();if (var4 == this.head && this.tryAcquire(var1)) {this.setHead(var2);var4.next = null;var3 = false;return;}} while(!shouldParkAfterFailedAcquire(var4, var2) || !this.parkAndCheckInterrupt());throw new InterruptedException();} finally {if (var3) {this.cancelAcquire(var2);}}}private boolean doAcquireNanos(int var1, long var2) throws InterruptedException {if (var2 <= 0L) {return false;} else {long var4 = System.nanoTime() + var2;AbstractQueuedSynchronizer.Node var6 = this.addWaiter(AbstractQueuedSynchronizer.Node.EXCLUSIVE);boolean var7 = true;try {do {AbstractQueuedSynchronizer.Node var8 = var6.predecessor();boolean var9;if (var8 == this.head && this.tryAcquire(var1)) {this.setHead(var6);var8.next = null;var7 = false;var9 = true;return var9;}var2 = var4 - System.nanoTime();if (var2 <= 0L) {var9 = false;return var9;}if (shouldParkAfterFailedAcquire(var8, var6) && var2 > 1000L) {LockSupport.parkNanos(this, var2);}} while(!Thread.interrupted());throw new InterruptedException();} finally {if (var7) {this.cancelAcquire(var6);}}}}private void doAcquireShared(int var1) {AbstractQueuedSynchronizer.Node var2 = this.addWaiter(AbstractQueuedSynchronizer.Node.SHARED);boolean var3 = true;try {boolean var4 = false;while(true) {AbstractQueuedSynchronizer.Node var5 = var2.predecessor();if (var5 == this.head) {int var6 = this.tryAcquireShared(var1);if (var6 >= 0) {this.setHeadAndPropagate(var2, var6);var5.next = null;if (var4) {selfInterrupt();}var3 = false;return;}}if (shouldParkAfterFailedAcquire(var5, var2) && this.parkAndCheckInterrupt()) {var4 = true;}}} finally {if (var3) {this.cancelAcquire(var2);}}}private void doAcquireSharedInterruptibly(int var1) throws InterruptedException {AbstractQueuedSynchronizer.Node var2 = this.addWaiter(AbstractQueuedSynchronizer.Node.SHARED);boolean var3 = true;try {AbstractQueuedSynchronizer.Node var4;do {var4 = var2.predecessor();if (var4 == this.head) {int var5 = this.tryAcquireShared(var1);if (var5 >= 0) {this.setHeadAndPropagate(var2, var5);var4.next = null;var3 = false;return;}}} while(!shouldParkAfterFailedAcquire(var4, var2) || !this.parkAndCheckInterrupt());throw new InterruptedException();} finally {if (var3) {this.cancelAcquire(var2);}}}private boolean doAcquireSharedNanos(int var1, long var2) throws InterruptedException {if (var2 <= 0L) {return false;} else {long var4 = System.nanoTime() + var2;AbstractQueuedSynchronizer.Node var6 = this.addWaiter(AbstractQueuedSynchronizer.Node.SHARED);boolean var7 = true;while(true) {boolean var14;try {AbstractQueuedSynchronizer.Node var8 = var6.predecessor();if (var8 == this.head) {int var9 = this.tryAcquireShared(var1);if (var9 >= 0) {this.setHeadAndPropagate(var6, var9);var8.next = null;var7 = false;boolean var10 = true;return var10;}}var2 = var4 - System.nanoTime();if (var2 > 0L) {if (shouldParkAfterFailedAcquire(var8, var6) && var2 > 1000L) {LockSupport.parkNanos(this, var2);}if (Thread.interrupted()) {throw new InterruptedException();}continue;}var14 = false;} finally {if (var7) {this.cancelAcquire(var6);}}return var14;}}}protected boolean tryAcquire(int var1) {throw new UnsupportedOperationException();}protected boolean tryRelease(int var1) {throw new UnsupportedOperationException();}protected int tryAcquireShared(int var1) {throw new UnsupportedOperationException();}protected boolean tryReleaseShared(int var1) {throw new UnsupportedOperationException();}protected boolean isHeldExclusively() {throw new UnsupportedOperationException();}public final void acquire(int var1) {if (!this.tryAcquire(var1) && this.acquireQueued(this.addWaiter(AbstractQueuedSynchronizer.Node.EXCLUSIVE), var1)) {selfInterrupt();}}public final void acquireInterruptibly(int var1) throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {if (!this.tryAcquire(var1)) {this.doAcquireInterruptibly(var1);}}}public final boolean tryAcquireNanos(int var1, long var2) throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {return this.tryAcquire(var1) || this.doAcquireNanos(var1, var2);}}public final boolean release(int var1) {if (this.tryRelease(var1)) {AbstractQueuedSynchronizer.Node var2 = this.head;if (var2 != null && var2.waitStatus != 0) {this.unparkSuccessor(var2);}return true;} else {return false;}}public final void acquireShared(int var1) {if (this.tryAcquireShared(var1) < 0) {this.doAcquireShared(var1);}}public final void acquireSharedInterruptibly(int var1) throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {if (this.tryAcquireShared(var1) < 0) {this.doAcquireSharedInterruptibly(var1);}}}public final boolean tryAcquireSharedNanos(int var1, long var2) throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {return this.tryAcquireShared(var1) >= 0 || this.doAcquireSharedNanos(var1, var2);}}public final boolean releaseShared(int var1) {if (this.tryReleaseShared(var1)) {this.doReleaseShared();return true;} else {return false;}}public final boolean hasQueuedThreads() {return this.head != this.tail;}public final boolean hasContended() {return this.head != null;}public final Thread getFirstQueuedThread() {return this.head == this.tail ? null : this.fullGetFirstQueuedThread();}private Thread fullGetFirstQueuedThread() {AbstractQueuedSynchronizer.Node var1 = this.head;AbstractQueuedSynchronizer.Node var2;Thread var3;if (this.head != null) {var2 = var1.next;if (var1.next != null && var2.prev == this.head) {var3 = var2.thread;if (var2.thread != null) {return var3;}}}var1 = this.head;if (this.head != null) {var2 = var1.next;if (var1.next != null && var2.prev == this.head) {var3 = var2.thread;if (var2.thread != null) {return var3;}}}AbstractQueuedSynchronizer.Node var4 = this.tail;Thread var5;for(var5 = null; var4 != null && var4 != this.head; var4 = var4.prev) {Thread var6 = var4.thread;if (var6 != null) {var5 = var6;}}return var5;}public final boolean isQueued(Thread var1) {if (var1 == null) {throw new NullPointerException();} else {for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != null; var2 = var2.prev) {if (var2.thread == var1) {return true;}}return false;}}final boolean apparentlyFirstQueuedIsExclusive() {AbstractQueuedSynchronizer.Node var1 = this.head;boolean var10000;if (this.head != null) {AbstractQueuedSynchronizer.Node var2 = var1.next;if (var1.next != null && !var2.isShared() && var2.thread != null) {var10000 = true;return var10000;}}var10000 = false;return var10000;}public final boolean hasQueuedPredecessors() {AbstractQueuedSynchronizer.Node var1 = this.tail;AbstractQueuedSynchronizer.Node var2 = this.head;boolean var10000;if (var2 != var1) {AbstractQueuedSynchronizer.Node var3 = var2.next;if (var2.next == null || var3.thread != Thread.currentThread()) {var10000 = true;return var10000;}}var10000 = false;return var10000;}public final int getQueueLength() {int var1 = 0;for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != null; var2 = var2.prev) {if (var2.thread != null) {++var1;}}return var1;}public final Collection<Thread> getQueuedThreads() {ArrayList var1 = new ArrayList();for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != null; var2 = var2.prev) {Thread var3 = var2.thread;if (var3 != null) {var1.add(var3);}}return var1;}public final Collection<Thread> getExclusiveQueuedThreads() {ArrayList var1 = new ArrayList();for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != null; var2 = var2.prev) {if (!var2.isShared()) {Thread var3 = var2.thread;if (var3 != null) {var1.add(var3);}}}return var1;}public final Collection<Thread> getSharedQueuedThreads() {ArrayList var1 = new ArrayList();for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != null; var2 = var2.prev) {if (var2.isShared()) {Thread var3 = var2.thread;if (var3 != null) {var1.add(var3);}}}return var1;}public String toString() {int var1 = this.getState();String var2 = this.hasQueuedThreads() ? "non" : "";return super.toString() + "[State = " + var1 + ", " + var2 + "empty queue]";}final boolean isOnSyncQueue(AbstractQueuedSynchronizer.Node var1) {if (var1.waitStatus != -2 && var1.prev != null) {return var1.next != null ? true : this.findNodeFromTail(var1);} else {return false;}}private boolean findNodeFromTail(AbstractQueuedSynchronizer.Node var1) {for(AbstractQueuedSynchronizer.Node var2 = this.tail; var2 != var1; var2 = var2.prev) {if (var2 == null) {return false;}}return true;}final boolean transferForSignal(AbstractQueuedSynchronizer.Node var1) {if (!compareAndSetWaitStatus(var1, -2, 0)) {return false;} else {AbstractQueuedSynchronizer.Node var2 = this.enq(var1);int var3 = var2.waitStatus;if (var3 > 0 || !compareAndSetWaitStatus(var2, var3, -1)) {LockSupport.unpark(var1.thread);}return true;}}final boolean transferAfterCancelledWait(AbstractQueuedSynchronizer.Node var1) {if (compareAndSetWaitStatus(var1, -2, 0)) {this.enq(var1);return true;} else {while(!this.isOnSyncQueue(var1)) {Thread.yield();}return false;}}final int fullyRelease(AbstractQueuedSynchronizer.Node var1) {boolean var2 = true;int var4;try {int var3 = this.getState();if (!this.release(var3)) {throw new IllegalMonitorStateException();}var2 = false;var4 = var3;} finally {if (var2) {var1.waitStatus = 1;}}return var4;}public final boolean owns(AbstractQueuedSynchronizer.ConditionObject var1) {return var1.isOwnedBy(this);}public final boolean hasWaiters(AbstractQueuedSynchronizer.ConditionObject var1) {if (!this.owns(var1)) {throw new IllegalArgumentException("Not owner");} else {return var1.hasWaiters();}}public final int getWaitQueueLength(AbstractQueuedSynchronizer.ConditionObject var1) {if (!this.owns(var1)) {throw new IllegalArgumentException("Not owner");} else {return var1.getWaitQueueLength();}}public final Collection<Thread> getWaitingThreads(AbstractQueuedSynchronizer.ConditionObject var1) {if (!this.owns(var1)) {throw new IllegalArgumentException("Not owner");} else {return var1.getWaitingThreads();}}private final boolean compareAndSetHead(AbstractQueuedSynchronizer.Node var1) {return unsafe.compareAndSwapObject(this, headOffset, (Object)null, var1);}private final boolean compareAndSetTail(AbstractQueuedSynchronizer.Node var1, AbstractQueuedSynchronizer.Node var2) {return unsafe.compareAndSwapObject(this, tailOffset, var1, var2);}private static final boolean compareAndSetWaitStatus(AbstractQueuedSynchronizer.Node var0, int var1, int var2) {return unsafe.compareAndSwapInt(var0, waitStatusOffset, var1, var2);}private static final boolean compareAndSetNext(AbstractQueuedSynchronizer.Node var0, AbstractQueuedSynchronizer.Node var1, AbstractQueuedSynchronizer.Node var2) {return unsafe.compareAndSwapObject(var0, nextOffset, var1, var2);}static {try {stateOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.class.getDeclaredField("state"));headOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.class.getDeclaredField("head"));tailOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.class.getDeclaredField("tail"));waitStatusOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.Node.class.getDeclaredField("waitStatus"));nextOffset = unsafe.objectFieldOffset(AbstractQueuedSynchronizer.Node.class.getDeclaredField("next"));} catch (Exception var1) {throw new Error(var1);}}public class ConditionObject implements Condition, Serializable {private static final long serialVersionUID = 1173984872572414699L;private transient AbstractQueuedSynchronizer.Node firstWaiter;private transient AbstractQueuedSynchronizer.Node lastWaiter;private static final int REINTERRUPT = 1;private static final int THROW_IE = -1;public ConditionObject() {}private AbstractQueuedSynchronizer.Node addConditionWaiter() {AbstractQueuedSynchronizer.Node var1 = this.lastWaiter;if (var1 != null && var1.waitStatus != -2) {this.unlinkCancelledWaiters();var1 = this.lastWaiter;}AbstractQueuedSynchronizer.Node var2 = new AbstractQueuedSynchronizer.Node(Thread.currentThread(), -2);if (var1 == null) {this.firstWaiter = var2;} else {var1.nextWaiter = var2;}this.lastWaiter = var2;return var2;}private void doSignal(AbstractQueuedSynchronizer.Node var1) {while(true) {if ((this.firstWaiter = var1.nextWaiter) == null) {this.lastWaiter = null;}var1.nextWaiter = null;if (!AbstractQueuedSynchronizer.this.transferForSignal(var1)) {var1 = this.firstWaiter;if (this.firstWaiter != null) {continue;}}return;}}private void doSignalAll(AbstractQueuedSynchronizer.Node var1) {this.lastWaiter = this.firstWaiter = null;AbstractQueuedSynchronizer.Node var2;do {var2 = var1.nextWaiter;var1.nextWaiter = null;AbstractQueuedSynchronizer.this.transferForSignal(var1);var1 = var2;} while(var2 != null);}private void unlinkCancelledWaiters() {AbstractQueuedSynchronizer.Node var1 = this.firstWaiter;AbstractQueuedSynchronizer.Node var3;for(AbstractQueuedSynchronizer.Node var2 = null; var1 != null; var1 = var3) {var3 = var1.nextWaiter;if (var1.waitStatus != -2) {var1.nextWaiter = null;if (var2 == null) {this.firstWaiter = var3;} else {var2.nextWaiter = var3;}if (var3 == null) {this.lastWaiter = var2;}} else {var2 = var1;}}}public final void signal() {if (!AbstractQueuedSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {AbstractQueuedSynchronizer.Node var1 = this.firstWaiter;if (var1 != null) {this.doSignal(var1);}}}public final void signalAll() {if (!AbstractQueuedSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {AbstractQueuedSynchronizer.Node var1 = this.firstWaiter;if (var1 != null) {this.doSignalAll(var1);}}}public final void awaitUninterruptibly() {AbstractQueuedSynchronizer.Node var1 = this.addConditionWaiter();int var2 = AbstractQueuedSynchronizer.this.fullyRelease(var1);boolean var3 = false;while(!AbstractQueuedSynchronizer.this.isOnSyncQueue(var1)) {LockSupport.park(this);if (Thread.interrupted()) {var3 = true;}}if (AbstractQueuedSynchronizer.this.acquireQueued(var1, var2) || var3) {AbstractQueuedSynchronizer.selfInterrupt();}}private int checkInterruptWhileWaiting(AbstractQueuedSynchronizer.Node var1) {return Thread.interrupted() ? (AbstractQueuedSynchronizer.this.transferAfterCancelledWait(var1) ? -1 : 1) : 0;}private void reportInterruptAfterWait(int var1) throws InterruptedException {if (var1 == -1) {throw new InterruptedException();} else {if (var1 == 1) {AbstractQueuedSynchronizer.selfInterrupt();}}}public final void await() throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {AbstractQueuedSynchronizer.Node var1 = this.addConditionWaiter();int var2 = AbstractQueuedSynchronizer.this.fullyRelease(var1);int var3 = 0;while(!AbstractQueuedSynchronizer.this.isOnSyncQueue(var1)) {LockSupport.park(this);if ((var3 = this.checkInterruptWhileWaiting(var1)) != 0) {break;}}if (AbstractQueuedSynchronizer.this.acquireQueued(var1, var2) && var3 != -1) {var3 = 1;}if (var1.nextWaiter != null) {this.unlinkCancelledWaiters();}if (var3 != 0) {this.reportInterruptAfterWait(var3);}}}public final long awaitNanos(long var1) throws InterruptedException {if (Thread.interrupted()) {throw new InterruptedException();} else {AbstractQueuedSynchronizer.Node var3 = this.addConditionWaiter();int var4 = AbstractQueuedSynchronizer.this.fullyRelease(var3);long var5 = System.nanoTime() + var1;int var7;for(var7 = 0; !AbstractQueuedSynchronizer.this.isOnSyncQueue(var3); var1 = var5 - System.nanoTime()) {if (var1 <= 0L) {AbstractQueuedSynchronizer.this.transferAfterCancelledWait(var3);break;}if (var1 >= 1000L) {LockSupport.parkNanos(this, var1);}if ((var7 = this.checkInterruptWhileWaiting(var3)) != 0) {break;}}if (AbstractQueuedSynchronizer.this.acquireQueued(var3, var4) && var7 != -1) {var7 = 1;}if (var3.nextWaiter != null) {this.unlinkCancelledWaiters();}if (var7 != 0) {this.reportInterruptAfterWait(var7);}return var5 - System.nanoTime();}}public final boolean awaitUntil(Date var1) throws InterruptedException {long var2 = var1.getTime();if (Thread.interrupted()) {throw new InterruptedException();} else {AbstractQueuedSynchronizer.Node var4 = this.addConditionWaiter();int var5 = AbstractQueuedSynchronizer.this.fullyRelease(var4);boolean var6 = false;int var7 = 0;while(!AbstractQueuedSynchronizer.this.isOnSyncQueue(var4)) {if (System.currentTimeMillis() > var2) {var6 = AbstractQueuedSynchronizer.this.transferAfterCancelledWait(var4);break;}LockSupport.parkUntil(this, var2);if ((var7 = this.checkInterruptWhileWaiting(var4)) != 0) {break;}}if (AbstractQueuedSynchronizer.this.acquireQueued(var4, var5) && var7 != -1) {var7 = 1;}if (var4.nextWaiter != null) {this.unlinkCancelledWaiters();}if (var7 != 0) {this.reportInterruptAfterWait(var7);}return !var6;}}public final boolean await(long var1, TimeUnit var3) throws InterruptedException {long var4 = var3.toNanos(var1);if (Thread.interrupted()) {throw new InterruptedException();} else {AbstractQueuedSynchronizer.Node var6 = this.addConditionWaiter();int var7 = AbstractQueuedSynchronizer.this.fullyRelease(var6);long var8 = System.nanoTime() + var4;boolean var10 = false;int var11;for(var11 = 0; !AbstractQueuedSynchronizer.this.isOnSyncQueue(var6); var4 = var8 - System.nanoTime()) {if (var4 <= 0L) {var10 = AbstractQueuedSynchronizer.this.transferAfterCancelledWait(var6);break;}if (var4 >= 1000L) {LockSupport.parkNanos(this, var4);}if ((var11 = this.checkInterruptWhileWaiting(var6)) != 0) {break;}}if (AbstractQueuedSynchronizer.this.acquireQueued(var6, var7) && var11 != -1) {var11 = 1;}if (var6.nextWaiter != null) {this.unlinkCancelledWaiters();}if (var11 != 0) {this.reportInterruptAfterWait(var11);}return !var10;}}final boolean isOwnedBy(AbstractQueuedSynchronizer var1) {return var1 == AbstractQueuedSynchronizer.this;}protected final boolean hasWaiters() {if (!AbstractQueuedSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {for(AbstractQueuedSynchronizer.Node var1 = this.firstWaiter; var1 != null; var1 = var1.nextWaiter) {if (var1.waitStatus == -2) {return true;}}return false;}}protected final int getWaitQueueLength() {if (!AbstractQueuedSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {int var1 = 0;for(AbstractQueuedSynchronizer.Node var2 = this.firstWaiter; var2 != null; var2 = var2.nextWaiter) {if (var2.waitStatus == -2) {++var1;}}return var1;}}protected final Collection<Thread> getWaitingThreads() {if (!AbstractQueuedSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {ArrayList var1 = new ArrayList();for(AbstractQueuedSynchronizer.Node var2 = this.firstWaiter; var2 != null; var2 = var2.nextWaiter) {if (var2.waitStatus == -2) {Thread var3 = var2.thread;if (var3 != null) {var1.add(var3);}}}return var1;}}}static final class Node {static final AbstractQueuedSynchronizer.Node SHARED = new AbstractQueuedSynchronizer.Node();static final AbstractQueuedSynchronizer.Node EXCLUSIVE = null;static final int CANCELLED = 1;static final int SIGNAL = -1;static final int CONDITION = -2;static final int PROPAGATE = -3;volatile int waitStatus;volatile AbstractQueuedSynchronizer.Node prev;volatile AbstractQueuedSynchronizer.Node next;volatile Thread thread;AbstractQueuedSynchronizer.Node nextWaiter;final boolean isShared() {return this.nextWaiter == SHARED;}final AbstractQueuedSynchronizer.Node predecessor() throws NullPointerException {AbstractQueuedSynchronizer.Node var1 = this.prev;if (var1 == null) {throw new NullPointerException();} else {return var1;}}Node() {}Node(Thread var1, AbstractQueuedSynchronizer.Node var2) {this.nextWaiter = var2;this.thread = var1;}Node(Thread var1, int var2) {this.waitStatus = var2;this.thread = var1;}} }

cas :

protected final boolean compareAndSetState(int var1, int var2) {return unsafe.compareAndSwapInt(this, stateOffset, var1, var2);}

看下unsafe類,這個類是在sun.misc包下面:

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package sun.misc;import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.security.ProtectionDomain; import sun.reflect.CallerSensitive; import sun.reflect.Reflection;public final class Unsafe {private static final Unsafe theUnsafe;public static final int INVALID_FIELD_OFFSET = -1;public static final int ARRAY_BOOLEAN_BASE_OFFSET;public static final int ARRAY_BYTE_BASE_OFFSET;public static final int ARRAY_SHORT_BASE_OFFSET;public static final int ARRAY_CHAR_BASE_OFFSET;public static final int ARRAY_INT_BASE_OFFSET;public static final int ARRAY_LONG_BASE_OFFSET;public static final int ARRAY_FLOAT_BASE_OFFSET;public static final int ARRAY_DOUBLE_BASE_OFFSET;public static final int ARRAY_OBJECT_BASE_OFFSET;public static final int ARRAY_BOOLEAN_INDEX_SCALE;public static final int ARRAY_BYTE_INDEX_SCALE;public static final int ARRAY_SHORT_INDEX_SCALE;public static final int ARRAY_CHAR_INDEX_SCALE;public static final int ARRAY_INT_INDEX_SCALE;public static final int ARRAY_LONG_INDEX_SCALE;public static final int ARRAY_FLOAT_INDEX_SCALE;public static final int ARRAY_DOUBLE_INDEX_SCALE;public static final int ARRAY_OBJECT_INDEX_SCALE;public static final int ADDRESS_SIZE;private static native void registerNatives();private Unsafe() {}@CallerSensitivepublic static Unsafe getUnsafe() {Class var0 = Reflection.getCallerClass();if (!VM.isSystemDomainLoader(var0.getClassLoader())) {throw new SecurityException("Unsafe");} else {return theUnsafe;}}public native int getInt(Object var1, long var2);public native void putInt(Object var1, long var2, int var4);public native Object getObject(Object var1, long var2);public native void putObject(Object var1, long var2, Object var4);public native boolean getBoolean(Object var1, long var2);public native void putBoolean(Object var1, long var2, boolean var4);public native byte getByte(Object var1, long var2);public native void putByte(Object var1, long var2, byte var4);public native short getShort(Object var1, long var2);public native void putShort(Object var1, long var2, short var4);public native char getChar(Object var1, long var2);public native void putChar(Object var1, long var2, char var4);public native long getLong(Object var1, long var2);public native void putLong(Object var1, long var2, long var4);public native float getFloat(Object var1, long var2);public native void putFloat(Object var1, long var2, float var4);public native double getDouble(Object var1, long var2);public native void putDouble(Object var1, long var2, double var4);/** @deprecated */@Deprecatedpublic int getInt(Object var1, int var2) {return this.getInt(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putInt(Object var1, int var2, int var3) {this.putInt(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic Object getObject(Object var1, int var2) {return this.getObject(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putObject(Object var1, int var2, Object var3) {this.putObject(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic boolean getBoolean(Object var1, int var2) {return this.getBoolean(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putBoolean(Object var1, int var2, boolean var3) {this.putBoolean(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic byte getByte(Object var1, int var2) {return this.getByte(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putByte(Object var1, int var2, byte var3) {this.putByte(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic short getShort(Object var1, int var2) {return this.getShort(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putShort(Object var1, int var2, short var3) {this.putShort(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic char getChar(Object var1, int var2) {return this.getChar(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putChar(Object var1, int var2, char var3) {this.putChar(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic long getLong(Object var1, int var2) {return this.getLong(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putLong(Object var1, int var2, long var3) {this.putLong(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic float getFloat(Object var1, int var2) {return this.getFloat(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putFloat(Object var1, int var2, float var3) {this.putFloat(var1, (long)var2, var3);}/** @deprecated */@Deprecatedpublic double getDouble(Object var1, int var2) {return this.getDouble(var1, (long)var2);}/** @deprecated */@Deprecatedpublic void putDouble(Object var1, int var2, double var3) {this.putDouble(var1, (long)var2, var3);}public native byte getByte(long var1);public native void putByte(long var1, byte var3);public native short getShort(long var1);public native void putShort(long var1, short var3);public native char getChar(long var1);public native void putChar(long var1, char var3);public native int getInt(long var1);public native void putInt(long var1, int var3);public native long getLong(long var1);public native void putLong(long var1, long var3);public native float getFloat(long var1);public native void putFloat(long var1, float var3);public native double getDouble(long var1);public native void putDouble(long var1, double var3);public native long getAddress(long var1);public native void putAddress(long var1, long var3);public native long allocateMemory(long var1);public native long reallocateMemory(long var1, long var3);public native void setMemory(Object var1, long var2, long var4, byte var6);public void setMemory(long var1, long var3, byte var5) {this.setMemory((Object)null, var1, var3, var5);}public native void copyMemory(Object var1, long var2, Object var4, long var5, long var7);public void copyMemory(long var1, long var3, long var5) {this.copyMemory((Object)null, var1, (Object)null, var3, var5);}public native void freeMemory(long var1);/** @deprecated */@Deprecatedpublic int fieldOffset(Field var1) {return Modifier.isStatic(var1.getModifiers()) ? (int)this.staticFieldOffset(var1) : (int)this.objectFieldOffset(var1);}/** @deprecated */@Deprecatedpublic Object staticFieldBase(Class<?> var1) {Field[] var2 = var1.getDeclaredFields();for(int var3 = 0; var3 < var2.length; ++var3) {if (Modifier.isStatic(var2[var3].getModifiers())) {return this.staticFieldBase(var2[var3]);}}return null;}public native long staticFieldOffset(Field var1);public native long objectFieldOffset(Field var1);public native Object staticFieldBase(Field var1);public native boolean shouldBeInitialized(Class<?> var1);public native void ensureClassInitialized(Class<?> var1);public native int arrayBaseOffset(Class<?> var1);public native int arrayIndexScale(Class<?> var1);public native int addressSize();public native int pageSize();public native Class<?> defineClass(String var1, byte[] var2, int var3, int var4, ClassLoader var5, ProtectionDomain var6);public native Class<?> defineAnonymousClass(Class<?> var1, byte[] var2, Object[] var3);public native Object allocateInstance(Class<?> var1) throws InstantiationException;/** @deprecated */@Deprecatedpublic native void monitorEnter(Object var1);/** @deprecated */@Deprecatedpublic native void monitorExit(Object var1);/** @deprecated */@Deprecatedpublic native boolean tryMonitorEnter(Object var1);public native void throwException(Throwable var1);public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);public final native boolean compareAndSwapLong(Object var1, long var2, long var4, long var6);public native Object getObjectVolatile(Object var1, long var2);public native void putObjectVolatile(Object var1, long var2, Object var4);public native int getIntVolatile(Object var1, long var2);public native void putIntVolatile(Object var1, long var2, int var4);public native boolean getBooleanVolatile(Object var1, long var2);public native void putBooleanVolatile(Object var1, long var2, boolean var4);public native byte getByteVolatile(Object var1, long var2);public native void putByteVolatile(Object var1, long var2, byte var4);public native short getShortVolatile(Object var1, long var2);public native void putShortVolatile(Object var1, long var2, short var4);public native char getCharVolatile(Object var1, long var2);public native void putCharVolatile(Object var1, long var2, char var4);public native long getLongVolatile(Object var1, long var2);public native void putLongVolatile(Object var1, long var2, long var4);public native float getFloatVolatile(Object var1, long var2);public native void putFloatVolatile(Object var1, long var2, float var4);public native double getDoubleVolatile(Object var1, long var2);public native void putDoubleVolatile(Object var1, long var2, double var4);public native void putOrderedObject(Object var1, long var2, Object var4);public native void putOrderedInt(Object var1, long var2, int var4);public native void putOrderedLong(Object var1, long var2, long var4);public native void unpark(Object var1);public native void park(boolean var1, long var2);public native int getLoadAverage(double[] var1, int var2);public final int getAndAddInt(Object var1, long var2, int var4) {int var5;do {var5 = this.getIntVolatile(var1, var2);} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));return var5;}public final long getAndAddLong(Object var1, long var2, long var4) {long var6;do {var6 = this.getLongVolatile(var1, var2);} while(!this.compareAndSwapLong(var1, var2, var6, var6 + var4));return var6;}public final int getAndSetInt(Object var1, long var2, int var4) {int var5;do {var5 = this.getIntVolatile(var1, var2);} while(!this.compareAndSwapInt(var1, var2, var5, var4));return var5;}public final long getAndSetLong(Object var1, long var2, long var4) {long var6;do {var6 = this.getLongVolatile(var1, var2);} while(!this.compareAndSwapLong(var1, var2, var6, var4));return var6;}public final Object getAndSetObject(Object var1, long var2, Object var4) {Object var5;do {var5 = this.getObjectVolatile(var1, var2);} while(!this.compareAndSwapObject(var1, var2, var5, var4));return var5;}public native void loadFence();public native void storeFence();public native void fullFence();private static void throwIllegalAccessError() {throw new IllegalAccessError();}static {registerNatives();Reflection.registerMethodsToFilter(Unsafe.class, new String[]{"getUnsafe"});theUnsafe = new Unsafe();ARRAY_BOOLEAN_BASE_OFFSET = theUnsafe.arrayBaseOffset(boolean[].class);ARRAY_BYTE_BASE_OFFSET = theUnsafe.arrayBaseOffset(byte[].class);ARRAY_SHORT_BASE_OFFSET = theUnsafe.arrayBaseOffset(short[].class);ARRAY_CHAR_BASE_OFFSET = theUnsafe.arrayBaseOffset(char[].class);ARRAY_INT_BASE_OFFSET = theUnsafe.arrayBaseOffset(int[].class);ARRAY_LONG_BASE_OFFSET = theUnsafe.arrayBaseOffset(long[].class);ARRAY_FLOAT_BASE_OFFSET = theUnsafe.arrayBaseOffset(float[].class);ARRAY_DOUBLE_BASE_OFFSET = theUnsafe.arrayBaseOffset(double[].class);ARRAY_OBJECT_BASE_OFFSET = theUnsafe.arrayBaseOffset(Object[].class);ARRAY_BOOLEAN_INDEX_SCALE = theUnsafe.arrayIndexScale(boolean[].class);ARRAY_BYTE_INDEX_SCALE = theUnsafe.arrayIndexScale(byte[].class);ARRAY_SHORT_INDEX_SCALE = theUnsafe.arrayIndexScale(short[].class);ARRAY_CHAR_INDEX_SCALE = theUnsafe.arrayIndexScale(char[].class);ARRAY_INT_INDEX_SCALE = theUnsafe.arrayIndexScale(int[].class);ARRAY_LONG_INDEX_SCALE = theUnsafe.arrayIndexScale(long[].class);ARRAY_FLOAT_INDEX_SCALE = theUnsafe.arrayIndexScale(float[].class);ARRAY_DOUBLE_INDEX_SCALE = theUnsafe.arrayIndexScale(double[].class);ARRAY_OBJECT_INDEX_SCALE = theUnsafe.arrayIndexScale(Object[].class);ADDRESS_SIZE = theUnsafe.addressSize();} }

看到 unsafe 直接調用native c 接口方法。

但是在sun.misc 下面也有Lock 方法:


源碼代碼:

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package sun.misc;public class Lock {private boolean locked = false;public Lock() {}public final synchronized void lock() throws InterruptedException {while(this.locked) {this.wait();}this.locked = true;}public final synchronized void unlock() {this.locked = false;this.notifyAll();} }

不過實現不是cas,而是synchronized.

總結

以上是生活随笔為你收集整理的java Lock 源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美激情第28页 | 国产免费xvideos视频入口 | 免费日韩一级片 | 久久久免费看片 | 黄色av成人在线 | 91毛片在线观看 | 亚洲综合色网站 | 中文字幕日韩伦理 | 麻豆视频免费在线播放 | 中文字幕欧美日韩va免费视频 | 国产精品女主播一区二区三区 | 五月婷婷久 | 久久国产精品一区二区三区四区 | 久草在| 国产精品18久久久久久久 | 国产一区二区三区高清播放 | 久香蕉 | 91资源在线免费观看 | 日本最新高清不卡中文字幕 | 国产96精品 | 国产精品美女久久久久久久网站 | 在线久草视频 | 免费在线观看黄色网 | 午夜视频在线观看一区二区三区 | 中文字幕久久精品一区 | 91成人网在线 | 特级西西444www大胆高清无视频 | 日韩av一区二区三区在线观看 | 精品人妖videos欧美人妖 | 五月婷婷丁香网 | 日韩精品极品视频 | 日韩电影中文 | 国产激情电影综合在线看 | 青青河边草免费视频 | 中文字幕欲求不满 | 97国产大学生情侣白嫩酒店 | 精品亚洲在线 | 色综合久久久久综合体 | 成人久久免费 | 国产在线国偷精品产拍免费yy | 9幺看片| 日韩精品中文字幕在线 | 免费黄a大片 | 久久久久国 | 精品久久久久久亚洲综合网 | 天天摸夜夜操 | 免费观看黄 | 99热手机在线 | 91资源在线 | 日本爱爱免费视频 | 干狠狠 | 超碰97.com | 国产美女精品久久久 | 69国产精品视频免费观看 | 国产精品久久久久久a | 九色精品免费永久在线 | 国产黄色片免费 | 91丨九色丨蝌蚪丨对白 | 久久久影视 | 美女福利视频一区二区 | 久久不射电影院 | 国产白浆视频 | 精品字幕在线 | 超碰在线最新网址 | 色综合久久久久综合体桃花网 | 亚洲国产精品久久久 | www.亚洲精品| 97人人添人澡人人爽超碰动图 | 日韩国产欧美视频 | 亚洲精品黄色在线观看 | 射射射综合网 | 精品999在线 | 中文字幕免费久久 | 天堂av免费观看 | 黄色av免费电影 | 日日夜夜精品网站 | 欧美日韩亚洲在线 | 国产精品久久久久影视 | 最近日本韩国中文字幕 | 久久99热精品这里久久精品 | 中文字幕4 | 91丨九色丨国产丨porny精品 | 久久艹人人 | 激情久久久久久久久久久久久久久久 | 国产美女精品在线 | 97在线观视频免费观看 | 久久国产精品影视 | 国产精品黄色在线观看 | 97免费中文视频在线观看 | 亚洲欧洲精品视频 | 黄p网站在线观看 | 精品久久久久久亚洲 | 麻豆视频在线播放 | 成人黄性视频 | 日韩大片免费在线观看 | 亚洲精品视频在线播放 | 日本一区二区免费在线观看 | 在线播放一区二区三区 | 亚洲五月 | 97精品超碰一区二区三区 | 亚洲每日更新 | 91高清免费看 | 欧美十八| 国产黄色片免费 | 欧美日比视频 | 久久官网 | 成人在线播放网站 | 99久久精品国产一区二区成人 | 久久亚洲欧美日韩精品专区 | 日韩av不卡在线观看 | 天天草天天色 | 日韩欧美在线免费观看 | 成片免费观看视频999 | 欧美最猛性xxxxx(亚洲精品) | 欧美黑吊大战白妞欧美 | 波多野结衣视频一区二区 | 五月天综合| 久久97视频 | 欧美一区二区三区在线视频观看 | 99精品视频免费观看视频 | 亚洲深夜影院 | 久久大片| www99精品| 色插综合| 草久在线| 免费观看www7722午夜电影 | a级国产乱理论片在线观看 伊人宗合网 | 天天干天天做天天操 | 久久久免费毛片 | 黄色一级免费网站 | 国产成人精品一区二三区 | 欧美日韩a视频 | 九九九九热精品免费视频点播观看 | 国产成人一区二区三区电影 | 精品视频免费播放 | 久久一区91| 国产999精品久久久影片官网 | 日韩理论在线播放 | 国产免费一区二区三区最新6 | 丝袜美腿亚洲 | 精品国产一区二区三区久久久蜜月 | 欧美精品免费在线观看 | 就要干b| 久草在线视频资源 | 青草视频在线看 | 黄色小说视频网站 | 久久久久女教师免费一区 | 日韩精品一区电影 | 视频二区在线 | 欧美在线观看禁18 | 亚洲 欧美 变态 国产 另类 | 天天操天 | 欧美日韩精品在线观看视频 | 成人一级影视 | 天天插日日插 | 九九热免费在线视频 | 五月天电影免费在线观看一区 | 狠狠干网址 | 亚洲黄色在线免费观看 | 国产午夜一区二区 | 97色在线观看 | 婷婷六月丁香激情 | 国产又粗又猛又黄又爽的视频 | 91在线观看欧美日韩 | 好看的国产精品视频 | 免费久草视频 | 日韩精品观看 | 天天摸天天操天天舔 | 欧美久久久久久久久久久久久 | 亚洲激情六月 | 久久久免费电影 | 国产精品美女久久久网av | 97视频在线观看成人 | 久久国产精品电影 | 日韩高清av在线 | 亚洲丁香日韩 | 国产剧情一区在线 | 久久精品波多野结衣 | 久久久精品国产一区二区电影四季 | 月丁香婷婷 | 99国产成+人+综合+亚洲 欧美 | 日日夜夜免费精品视频 | 在线免费观看一区二区三区 | 欧美日韩首页 | 国产97在线播放 | 国产亚洲在线视频 | 99色资源 | 波多野结衣小视频 | 六月丁香激情网 | 亚洲人在线7777777精品 | 婷婷国产在线观看 | 中文字幕在线看片 | 国产精品一区二区久久久 | 久久露脸国产精品 | 一区二区三区四区久久 | aaa毛片视频 | 最新免费av在线 | 最近中文字幕国语免费av | 国内精品久久久久久久影视麻豆 | 久久一区二区三区四区 | 国产黄色片久久久 | 亚洲区精品视频 | 国产精品夜夜夜一区二区三区尤 | 亚洲精品午夜久久久 | 欧美吞精| 亚洲一级片av| 一级黄色片在线播放 | 夜夜夜夜操 | 成人性生爱a∨ | 91正在播放| 波多野结衣亚洲一区二区 | 在线免费黄色片 | 一区免费观看 | 国产91精品一区二区麻豆网站 | 色噜噜日韩精品欧美一区二区 | 欧美日韩在线视频一区二区 | 成年人黄色免费看 | 免费在线成人 | 91大神在线观看视频 | 91最新视频在线观看 | 久久精品视频观看 | 探花视频在线版播放免费观看 | av在线电影播放 | 中文字幕成人在线 | 在线看91| 欧美日韩xx | 久久激情精品 | 日韩亚洲精品电影 | 国产精品第 | 国产精品美女久久 | 日韩av黄 | 1024手机在线看| 香蕉网在线 | 2024国产精品视频 | 九九免费在线看完整版 | 日本精品二区 | 亚洲精品麻豆 | 亚洲电影一级黄 | 丁香伊人网 | 国产精品久久久久永久免费看 | 亚洲资源在线观看 | 久久草在线免费 | 天天爽天天碰狠狠添 | 亚洲精选在线观看 | 久久精品毛片 | 日韩试看 | 日韩在线一级 | 2017狠狠干| 97在线影视 | 日产乱码一二三区别在线 | 狠狠干网 | 欧美xxxx性xxxxx高清 | 亚洲艳情 | 日日爽| 三级黄色欧美 | 免费a v观看 | 中文av日韩| 国产男女免费完整视频 | 在线成人高清电影 | 五月天久久激情 | 日韩欧美国产免费播放 | 婷婷在线资源 | 国产免费亚洲高清 | 国产精品久久久久9999 | www.黄色| 久久久2o19精品 | 久久久久亚洲精品国产 | 骄小bbw搡bbbb揉bbbb | 日韩伦理片一区二区三区 | 久久激情五月激情 | 精品爱爱| 日韩欧在线 | 国产一二三四在线观看视频 | 国产成人av电影 | av色综合网 | 超碰官网 | 在线观看视频免费播放 | 日韩欧美高清在线 | 日本久久成人中文字幕电影 | 一级黄色片在线播放 | av免费网站在线观看 | 国产成人黄色在线 | 精品国产网址 | 综合网中文字幕 | 欧美日韩伦理在线 | 在线观看日韩精品视频 | 久久综合亚洲鲁鲁五月久久 | 人人讲下载 | 欧美极品一区二区三区 | 九九热在线视频免费观看 | 日韩免费中文字幕 | 手机看片1042 | 欧美日韩亚洲在线观看 | 国产视频黄 | 99精品国产兔费观看久久99 | 99免在线观看免费视频高清 | 新av在线 | 久久久91精品国产一区二区精品 | 欧美另类xxxxx | 九九热只有精品 | 日韩无在线 | 久久99婷婷 | 91视频免费看片 | 婷婷网在线 | 亚洲电影黄色 | 午夜国产福利在线 | 超碰在线天天 | 国产黄色精品视频 | 欧美成人xxxxxxxx| 五月开心激情网 | 国产精品美女在线观看 | 黄色精品久久久 | 九九精品无码 | 国产精品网红直播 | 日韩视频区| 又爽又黄又刺激的视频 | 欧美 激情 国产 91 在线 | 久久黄色免费观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 99在线热播精品免费99热 | 狠狠干我 | 久久a v电影 | 超碰人人av | 中文字幕精品在线 | 一区二区三区四区五区六区 | 蜜臀av性久久久久av蜜臀妖精 | 日韩色一区二区三区 | 国产成人精品一区二区三区在线观看 | 成片免费观看视频999 | 国产精品色婷婷 | 黄色国产成人 | 国产精品少妇 | 久久精品视频18 | 国产午夜在线 | 国产精品久久久久久久久久 | 国产精品福利午夜在线观看 | 久久国产手机看片 | 日本黄色免费网站 | 在线免费看黄网站 | 国产黄色在线看 | 99久久综合狠狠综合久久 | 精品久久一级片 | 久久免费视频这里只有精品 | 在线观看视频黄 | 国产69精品久久99的直播节目 | 免费在线黄色av | 91精品啪在线观看国产81旧版 | 日韩av免费一区 | 天天综合狠狠精品 | 色综合天天 | 日日干夜夜操视频 | 免费a v网站| 成年人视频在线 | 成年人在线视频观看 | 中文字幕久久精品亚洲乱码 | 婷婷深爱五月 | 激情视频网页 | 97视频在线免费观看 | 黄色网在线播放 | 亚洲无吗av | 国产精品综合av一区二区国产馆 | 国产成人三级在线观看 | 色网站国产精品 | 玖玖玖精品| 国产精品女同一区二区三区久久夜 | 久久欧洲视频 | 日本精品一区二区三区在线观看 | 国产色视频123区 | 婷婷在线免费视频 | 色视频在线观看免费 | 日日日天天天 | 亚洲综合色激情五月 | 国产精品 日韩 欧美 | 久草视频网 | 国产美女视频免费 | 中文不卡视频 | 一区二区三区免费 | 日韩超碰| 国产区 在线 | 中文字幕久久精品一区 | 国产精品久久久久久久妇 | 狠狠网站| 中文字幕一区二区三区乱码不卡 | 日韩精品一区二区三区外面 | a在线观看免费视频 | 一区二区久久久久 | 国产九九九精品视频 | 97超碰色偷偷 | 精品999在线观看 | 国产精品一二 | 91视频久久久久 | 日韩精品一区电影 | 日本三级香港三级人妇99 | 91在线小视频 | 免费观看av| 91九色最新| 国内99视频| 色射色| 9在线观看免费 | 亚洲乱码久久 | 国产网红在线观看 | 正在播放日韩 | 99久久日韩精品免费热麻豆美女 | 成人在线免费视频观看 | 国产日韩欧美视频在线观看 | 最近中文字幕免费 | 九九色网 | 91黄色小视频 | 国产永久免费高清在线观看视频 | 日韩在线视频一区二区三区 | 国内精品久久天天躁人人爽 | 超碰在线最新网址 | 久久精品国产亚洲精品2020 | 国产成人精品亚洲日本在线观看 | 成年人免费在线观看网站 | 免费手机黄色网址 | 日本一区二区三区免费观看 | 久久久毛片 | 精品国产乱码久久久久久久 | 精品一区二区在线观看 | 日韩免费在线观看 | 亚洲动漫在线观看 | 国产首页| 九九亚洲视频 | 日韩精品一区二区免费视频 | 久久爱综合| 亚洲精品日韩一区二区电影 | 国产一区欧美二区 | 久久成人18免费网站 | 精品一区二区三区香蕉蜜桃 | 日韩欧美99 | 日日夜夜爱 | 特级西西www44高清大胆图片 | 久久色在线播放 | 国产高清无av久久 | 免费久久视频 | 久久这里只有精品首页 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 天天干天天射天天插 | 成年人免费看av | 97在线观看免费高清完整版在线观看 | 91九色porny在线 | 成人性生交大片免费观看网站 | 国产一区二区三区免费在线观看 | 人人添人人澡人人澡人人人爽 | 最新国产在线视频 | 在线看成人片 | 婷婷五月在线视频 | 美女福利视频一区二区 | 69国产精品视频免费观看 | 国产亚洲精品福利 | 久久天天综合网 | 伊人久久一区 | 日韩精品无| 日韩电影一区二区在线观看 | 在线免费观看黄网站 | 色欧美88888久久久久久影院 | 亚洲午夜精品一区二区三区电影院 | 国产麻豆果冻传媒在线观看 | 精品在线观 | 一区二区精品视频 | 九九热精品在线 | 国产免费观看久久 | 久草在线网址 | 亚洲国产精品一区二区久久hs | 久久五月激情 | 91经典在线 | 成人精品一区二区三区中文字幕 | 日韩高清免费无专码区 | 国产成人一区二区三区影院在线 | 99视频一区二区 | 成人天堂网 | 国产精品18久久久久久久网站 | 1024手机基地在线观看 | 成人观看视频 | 狠狠狠色丁香婷婷综合久久五月 | 国产精品手机在线播放 | 久久精品中文字幕少妇 | 久久成人精品电影 | 国产一级二级av | 久久8| 综合网伊人 | 亚洲国产日韩一区 | 人人舔人人干 | 亚洲激情综合 | 911久久 | 日韩精选在线 | 久久久久北条麻妃免费看 | 色偷偷男人的天堂av | 久久免费视屏 | 在线观看国产高清视频 | 99精品国自产在线 | 国产无限资源在线观看 | 激情av在线播放 | 精品99久久久久久 | 一区二区三区免费 | 亚洲免费一级电影 | 日日爽视频 | av在线最新| 在线观看中文字幕一区二区 | 国产黄色片网站 | av怡红院| 天天天射 | 日韩在线国产 | 五月开心激情网 | 香蕉蜜桃视频 | 九九综合在线 | 在线播放一区二区三区 | 骄小bbw搡bbbb揉bbbb | 欧美黑人性猛交 | 亚洲精品美女在线观看 | 精品亚洲男同gayvideo网站 | 日韩免费中文 | 在线观影网站 | 4hu视频| 中文字幕免费观看 | 久久成人高清视频 | 免费美女久久99 | 国内精品视频在线 | 国产精品久久一区二区无卡 | 国产成人黄色网址 | 蜜臀久久99精品久久久酒店新书 | 在线视频久| 久久久在线观看 | 狠狠色网 | 99精品视频免费观看视频 | 日韩美女免费线视频 | 中文字幕精品一区久久久久 | 久久久av免费 | 最近中文字幕国语免费av | 欧美日韩高清一区 | 午夜免费视频网站 | 国产久草在线观看 | 亚洲婷久久 | 五月天网页 | 亚洲成人精品在线 | 看毛片网站 | 久久夜av| av在线日韩 | 亚洲黄色高清 | 中文字幕黄色网址 | 久久久国产一区二区三区四区小说 | 中文字幕在线免费97 | 成人一级在线 | 最近中文字幕mv | 日韩电影一区二区在线 | 综合网中文字幕 | 99视频在线免费观看 | 91在线影院 | 日韩精品一区二区在线 | 日韩伦理片一区二区三区 | 麻豆视传媒官网免费观看 | 一区二区三区日韩在线 | 水蜜桃亚洲一二三四在线 | 欧美精品久久天天躁 | 久久综合久久88 | 国产区 在线 | 91桃色免费视频 | 久久精品久久精品 | 亚洲专区 国产精品 | 亚洲欧美激情精品一区二区 | 深夜免费福利在线 | 色全色在线资源网 | 人人爽人人av | 五月天激情视频在线观看 | 一区中文字幕 | 亚洲精品中文字幕视频 | 深爱婷婷 | 毛片播放网站 | 色a综合| 久久人人爽人人 | 日日操夜 | 一区 在线 影院 | 国产一级片免费播放 | 97精品国产97久久久久久免费 | 美女福利视频在线 | 一区二区视频播放 | 天堂中文在线视频 | 国产成人精品a | 99精品欧美一区二区三区黑人哦 | 天天综合网久久综合网 | 国产精品一区免费看8c0m | 热久久国产精品 | 在线网址你懂得 | 久久噜噜少妇网站 | 天天色婷婷 | 天天操夜夜干 | 手机看片中文字幕 | 亚洲精品国产精品国自 | 亚州av一区 | 国内精品久久久久影院一蜜桃 | 国产视频美女 | 狠狠色伊人亚洲综合网站色 | 久久久久久久国产精品 | 久久草视频 | 久章操| 国产精品一区二区在线播放 | 亚洲情感电影大片 | 一区在线播放 | 中文字幕刺激在线 | 视频国产一区二区三区 | 天天综合狠狠精品 | 欧美aaaxxxx做受视频 | 久久久网页 | 精品一区二区日韩 | 黄色成人小视频 | 中文字幕成人在线 | 国产午夜精品久久 | 在线播放亚洲激情 | 日韩网站一区二区 | 97视频在线 | 国色天香在线 | 午夜精品久久久久久久久久久 | 91精品在线看 | 91精品爽啪蜜夜国产在线播放 | 亚洲一区 av | 中文在线免费看视频 | 亚洲日本韩国一区二区 | 九九久久国产精品 | 国产午夜在线观看视频 | 亚洲激情在线观看 | 在线国产91 | av一级久久 | 97在线免费视频观看 | 国产精品淫片 | 24小时日本在线www免费的 | 91网页版免费观看 | 在线国产一区二区 | 在线高清av| 欧美精品乱码99久久影院 | 久久资源总站 | 曰本三级在线 | 午夜黄色 | 婷婷伊人综合亚洲综合网 | 一区二区精品国产 | 国产高清不卡在线 | 欧美ⅹxxxxxx | 五月婷香 | 久久国产经典视频 | 中文字幕免费高清在线 | 91大片网站 | 夜夜操网| 在线观看成人 | 免费观看视频黄 | 成年人视频在线 | 日韩一区二区三区视频在线 | 亚洲欧美视频 | 日一日操一操 | 五月婷婷网站 | 深爱激情综合网 | 国产男女无遮挡猛进猛出在线观看 | 青青河边草手机免费 | 韩国在线视频一区 | 国产精品久久久久久久婷婷 | 午夜三级毛片 | 久久精品一区二区国产 | av片在线看 | 最新午夜电影 | 九九免费在线观看视频 | 黄色影院在线播放 | 欧美一二三视频 | 亚洲资源网 | 99精品影视| 国产精品久久婷婷六月丁香 | 中文字幕在线观看免费观看 | 96av在线视频 | 亚洲精品综合在线观看 | 久久综合久久综合这里只有精品 | 最近中文字幕视频完整版 | 国产97在线播放 | 玖玖在线视频观看 | 日韩在线不卡视频 | 亚洲精品免费观看视频 | 国产96av| 一区二区久久 | 色婷婷婷 | 成人久久18免费 | 一区二区三区久久精品 | av黄色在线| 免费看黄色小说的网站 | 啪啪免费观看网站 | 女女av在线 | 91专区在线观看 | 亚洲综合日韩在线 | 99在线视频免费观看 | 日日天天av | 91精品国产92久久久久 | av免费在线观看1 | 国产精品18videosex性欧美 | 99久久99久久精品国产片果冰 | 免费在线观看成年人视频 | 国产精品久久久久久久妇 | 九七人人干 | 911精品美国片911久久久 | 国产黄色精品在线 | av品善网| 国产精品亚洲成人 | 精品久久国产一区 | 欧美精品xx| 午夜影院在线观看18 | 中午字幕在线观看 | 精品国精品自拍自在线 | 中文在线天堂资源 | 色吊丝在线永久观看最新版本 | 国产成人99av超碰超爽 | 国产破处在线播放 | 激情网在线视频 | 日韩精品免费在线 | 黄色av大片| 国产99在线免费 | 国产夫妻性生活自拍 | 91污在线| 午夜精品久久久久99热app | av在线电影网站 | 狠狠狠色狠狠色综合 | 国产亚洲精品成人av久久影院 | 人人干干人人 | 99免费在线播放99久久免费 | 国产亚洲精品久久久久久久久久 | 91九色精品女同系列 | 天天插天天狠 | japanesexxxxfreehd乱熟 | 国产日产高清dvd碟片 | 天天色天天操天天爽 | 99精品在线看 | 国产婷婷 | 九九在线精品视频 | 精品久久久久久久 | 日本精品在线 | 一色av| 99久久精品午夜一区二区小说 | 国产精品爽爽爽 | 日韩a在线观看 | 91看片看淫黄大片 | 伊在线视频 | 日韩激情小视频 | 国产 亚洲 欧美 在线 | 精品国产欧美一区二区 | 97色在线观看免费视频 | 久久综合狠狠综合久久狠狠色综合 | 日韩在线电影 | 最新中文字幕在线观看视频 | 最近最新最好看中文视频 | 一区二区三区中文字幕在线 | 日日夜夜精品视频 | 美女在线免费观看视频 | 亚洲无吗av | 五月婷婷丁香色 | 免费观看国产精品 | 视频精品一区二区三区 | 91看片在线播放 | 日本久久免费视频 | 久久精品九色 | 国模视频一区二区三区 | 天天草天天草 | 五月导航 | 国产91在线免费视频 | 免费观看黄色12片一级视频 | 在线观看久久久久久 | 西西44人体做爰大胆视频 | 夜夜操网站 | 免费看的视频 | 深爱激情五月网 | 日韩av免费在线看 | 亚洲精品乱码久久久一二三 | 免费av一级电影 | 国产激情电影综合在线看 | 91九色在线观看 | 天天操天天是 | 亚洲国产欧美一区二区三区丁香婷 | 久久五月婷婷丁香 | 国产一区二区三区高清播放 | 国产免费一区二区三区最新6 | 免费色网 | 国产小视频你懂的在线 | 国产精品久久久久久久免费观看 | 又黄又爽免费视频 | 国产剧情av在线播放 | 日日夜操| 在线观看中文字幕dvd播放 | 久久久香蕉视频 | 99精品毛片 | 久久免费av电影 | 免费观看mv大片高清 | 久久久www成人免费精品 | 日韩av在线不卡 | 久久国产经典视频 | 久久黄色片 | 欧美日韩高清一区 | 久草资源在线 | 婷婷综合| 久久久久久久久久久电影 | 日韩精品一区二区三区电影 | 久久久.com | bbw av| 在线天堂视频 | 国产免费黄视频在线观看 | 狠狠躁日日躁夜夜躁av | 久久草在线视频国产 | 成人作爱视频 | 69国产盗摄一区二区三区五区 | 在线看国产一区 | 国产在线观看免费 | 婷婷资源站| 激情开心色 | 国产精品综合久久 | 豆豆色资源网xfplay | 国产日韩中文在线 | 日韩在线一二三区 | 999精品网 | 久久国产精品99久久人人澡 | 国产高清视频在线播放 | 中文字幕日韩在线播放 | 玖玖视频精品 | 国产在线观看免费av | 久草热视频 | 在线国产能看的 | 成人夜晚看av | 国产理论在线 | 久久久久久久久久久久99 | 97在线免费视频观看 | 麻豆视频免费在线观看 | 最新久久久 | 午夜精品视频免费在线观看 | 2023年中文无字幕文字 | 婷婷激情av | 亚洲精品一区二区三区新线路 | 奇米影视在线99精品 | 天天射天天舔天天干 | www.色五月| 国产一级视频在线 | 欧美一区日韩一区 | 久久99久久99精品免观看软件 | 久久久99精品免费观看 | 国产在线观看,日本 | 国产剧情一区二区 | 久久久久久高潮国产精品视 | 日韩美女av在线 | 久久精品国产久精国产 | 天堂av在线免费 | 黄色国产成人 | 四虎影视成人精品 | 不卡av电影在线 | 久久无码av一区二区三区电影网 | 超碰官网 | 黄色视屏免费在线观看 | 成人h动漫在线看 | 日韩影视精品 | 久久韩国免费视频 | 午夜三级理论 | 国产美女久久久 | 国产粉嫩在线观看 | 亚洲欧美日韩国产一区二区 | 亚洲精品综合欧美二区变态 | 天堂在线视频中文网 | 国产中文字幕视频在线观看 | 人人干人人干人人干 | 亚洲黄色在线播放 | 久久免费毛片视频 | 婷婷伊人综合亚洲综合网 | 国产精品18久久久久久久久 | 草莓视频在线观看免费观看 | 99夜色 | 免费开视频| 激情视频网页 | 91成人免费观看视频 | 久久综合欧美 | 91亚洲国产成人 | 中文字幕的 | 最新成人av | 日本xxxx裸体xxxx17| 欧美少妇xxx| 成人一级 | 欧美日本不卡视频 | 91九色九色| 久久在线看| 日日摸日日爽 | 亚洲精品欧美精品 | 精品不卡视频 | 天堂在线成人 | 日韩黄色在线观看 | 日韩免费看 | 99久久精品免费看国产免费软件 | 免费影视大全推荐 | 国产精品欧美精品 | 婷婷午夜激情 | 婷婷精品进入 | 成人高清av在线 | 色综合久久五月天 | 国产精品成人一区二区 | 免费日韩电影 | 麻豆国产电影 | 麻豆成人精品视频 | 麻豆91小视频 | 久久综合久久综合久久综合 | 日本不卡一区二区 | 男女拍拍免费视频 | 91桃色在线免费观看 | www免费网站在线观看 | 中文字幕在线观看日本 | 日本精品久久久一区二区三区 | 国产精品女同一区二区三区久久夜 | 狠狠色狠狠色终合网 | 久久男女视频 | 精品自拍av | 在线一二三四区 | 麻豆一区二区三区视频 | 18久久久久| 97成人在线| 91免费看黄 | 伊人色综合久久天天 | 激情久久久久久久久久久久久久久久 | 亚洲 欧洲 国产 日本 综合 | av电影免费在线播放 | 五月婷婷六月丁香在线观看 | 免费观看黄 | 国内一区二区视频 | 成人黄色毛片视频 | 狠狠操影视 | 久久综合免费视频 | 色av资源网| 在线国产日韩 | 天天做天天爱天天爽综合网 | 在线观看黄色免费视频 | 色婷婷精品大在线视频 | 中文字幕之中文字幕 | 色多多在线观看 | 国产黄色片久久 | 激情五月色播五月 | 97夜夜澡人人爽人人免费 | 最近日韩中文字幕中文 | 国产精品午夜在线 | 日韩精品久久久久久中文字幕8 | 久久99这里只有精品 | 久久久www成人免费精品 | 国产99久久久国产精品 | 中文字幕精品www乱入免费视频 | 国产91在线观 | 在线亚洲人成电影网站色www | 亚洲精品中文字幕在线观看 | 国产生活一级片 | 久久国产精品久久精品国产演员表 | 夜夜操天天摸 | 婷婷中文字幕 | 精品国产亚洲在线 | 国内精品久久久 | 色综合亚洲精品激情狠狠 | 三级黄色免费 | 国产xx视频 | 精品国产乱码一区二区三区在线 | 国产xvideos免费视频播放 | 亚洲在线a| 久久国产精品免费视频 | 97碰在线 | 黄av免费 | 97香蕉久久国产在线观看 | www五月婷婷 | 日韩av不卡在线观看 | 国产一区福利在线 | 五月天久久精品 | 国产精品久久久久久久久免费 | 亚洲特级片 | 天天干天天干天天射 | 色婷婷综合五月 | 久久蜜桃av | 久日精品 | 国内精品久久天天躁人人爽 | 日韩欧美在线免费 | 四虎影视久久久 | 国产精品无av码在线观看 | 精品91久久久久 | 亚洲天堂首页 | 国产精品999久久久 久产久精国产品 | 三上悠亚在线免费 | 狠狠干在线 | 在线免费观看黄色av | 天天操夜夜拍 | 91看片成人 | 天天干天天插 | 国产一卡二卡四卡国 | 91精品一区在线观看 | 日韩av网站在线播放 | 亚洲影院一区 | 手机在线看永久av片免费 | 九九亚洲精品 | 四虎成人免费影院 | 99色资源 | 丰满少妇麻豆av | 在线免费观看av网站 | 久久一精品 | 中文综合在线 | 一区二区三区播放 | 亚洲成av人片在线观看 | www.狠狠干 | 天天做天天爱夜夜爽 | 久久精品亚洲精品国产欧美 | 91| 日韩色在线观看 |