question: @ Override final Node < V > find ( int h , long k ) { for ( Node < V > e = first ; e != null ; ) { int s ; if ( ( ( s = lockState ) & ( WAITER | WRITER ) ) != 0 ) { if ( ( e . key == k ) ) { return e ; } e = e . next ; } else if ( U . compareAndSwapInt ( this , LOCKSTATE , s , s + READER ) ) { TreeNode < V > r ; TreeNode < V > p ; try { p = ( ( r = root ) == null ? null : r . findTreeNode ( h , k ) ) ; } finally { Thread w ; if ( getAndAddInt ( this , LOCKSTATE , - READER ) == ( READER | WAITER ) && ( w = waiter ) != null ) { LockSupport . unpark ( w ) ; } } return p ; } } return null ; }
target:  Returns matching node or null if none. Tries to search using tree comparisons from root, but continues linear search when lock not available.