632
1、非公平锁不能保证锁的获取是按照请求锁的顺序进行的。这可能会导致某个或某些线程永远得不到锁。
2、CPU唤醒线程的费用可以降低,整体吞吐效率会很高。但是可能会有线程长时间甚至永远得不到锁,导致饿死。
实例
/** *Syncobjectfornon-fairlocks */ staticfinalclassNonfairSyncextendsSync{ privatestaticfinallongserialVersionUID=7316153563782823691L; /** *Performslock.Tryimmediatebarge,backinguptonormal *acquireonfailure. */ finalvoidlock(){ if(compareAndSetState(0,1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1); protectedfinalbooleantryAcquire(intacquires){ returnnonfairTryAcquire(acquires); /** *Syncobjectforfairlocks */ staticfinalclassFairSyncextendsSync{ privatestaticfinallongserialVersionUID=-3000897897090466540L; finalvoidlock(){ acquire(1); /** *FairversionoftryAcquire.Don'tgrantaccessunless *recursivecallornowaitersorisfirst. */ protectedfinalbooleantryAcquire(intacquires){ finalThreadcurrent=Thread.currentThread(); intc=getState(); if(c==0){ if(!hasQueuedPredecessors()&& compareAndSetState(0,acquires)){ setExclusiveOwnerThread(current); returntrue; elseif(current==getExclusiveOwnerThread()){ intnextc=c+acquires; if(nextc<0) thrownewError("Maximumlockcountexceeded"); setState(nextc); returntrue; returnfalse;
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)