587 |
|
long s = lock.readLock(); |
588 |
|
Thread t = newStartedThread(new CheckedRunnable() { |
589 |
|
public void realRun() { |
590 |
< |
threadAssertEquals(0L, lock.tryWriteLock()); |
590 |
> |
assertEquals(0L, lock.tryWriteLock()); |
591 |
|
}}); |
592 |
|
|
593 |
|
awaitTermination(t); |
982 |
|
* IllegalMonitorStateException |
983 |
|
*/ |
984 |
|
public void testCannotUnlockOptimisticReadStamps() { |
985 |
< |
Runnable[] actions = { |
986 |
< |
() -> { |
987 |
< |
StampedLock sl = new StampedLock(); |
988 |
< |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
989 |
< |
sl.unlockRead(stamp); |
990 |
< |
}, |
991 |
< |
() -> { |
992 |
< |
StampedLock sl = new StampedLock(); |
993 |
< |
long stamp = sl.tryOptimisticRead(); |
994 |
< |
sl.unlock(stamp); |
995 |
< |
}, |
996 |
< |
|
997 |
< |
() -> { |
998 |
< |
StampedLock sl = new StampedLock(); |
999 |
< |
long stamp = sl.tryOptimisticRead(); |
1000 |
< |
sl.writeLock(); |
1001 |
< |
sl.unlock(stamp); |
1002 |
< |
}, |
1003 |
< |
() -> { |
1004 |
< |
StampedLock sl = new StampedLock(); |
1005 |
< |
sl.readLock(); |
1006 |
< |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
1007 |
< |
sl.unlockRead(stamp); |
1008 |
< |
}, |
1009 |
< |
() -> { |
1010 |
< |
StampedLock sl = new StampedLock(); |
1011 |
< |
sl.readLock(); |
1012 |
< |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
1013 |
< |
sl.unlock(stamp); |
1014 |
< |
}, |
1015 |
< |
|
1016 |
< |
() -> { |
1017 |
< |
StampedLock sl = new StampedLock(); |
1018 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1019 |
< |
assertValid(sl, stamp); |
1020 |
< |
sl.writeLock(); |
1021 |
< |
sl.unlockWrite(stamp); |
1022 |
< |
}, |
1023 |
< |
() -> { |
1024 |
< |
StampedLock sl = new StampedLock(); |
1025 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1026 |
< |
sl.writeLock(); |
1027 |
< |
sl.unlock(stamp); |
1028 |
< |
}, |
1029 |
< |
() -> { |
1030 |
< |
StampedLock sl = new StampedLock(); |
1031 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1032 |
< |
sl.readLock(); |
1033 |
< |
sl.unlockRead(stamp); |
1034 |
< |
}, |
1035 |
< |
() -> { |
1036 |
< |
StampedLock sl = new StampedLock(); |
1037 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1038 |
< |
sl.readLock(); |
1039 |
< |
sl.unlock(stamp); |
1040 |
< |
}, |
1041 |
< |
|
1042 |
< |
() -> { |
1043 |
< |
StampedLock sl = new StampedLock(); |
1044 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1045 |
< |
assertValid(sl, stamp); |
1046 |
< |
sl.writeLock(); |
1047 |
< |
sl.unlockWrite(stamp); |
1048 |
< |
}, |
1049 |
< |
() -> { |
1050 |
< |
StampedLock sl = new StampedLock(); |
1051 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1052 |
< |
sl.writeLock(); |
1053 |
< |
sl.unlock(stamp); |
1054 |
< |
}, |
1055 |
< |
() -> { |
1056 |
< |
StampedLock sl = new StampedLock(); |
1057 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1058 |
< |
sl.readLock(); |
1059 |
< |
sl.unlockRead(stamp); |
1060 |
< |
}, |
1061 |
< |
() -> { |
1062 |
< |
StampedLock sl = new StampedLock(); |
1063 |
< |
sl.readLock(); |
1064 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1065 |
< |
assertValid(sl, stamp); |
1066 |
< |
sl.readLock(); |
1067 |
< |
sl.unlockRead(stamp); |
1068 |
< |
}, |
1069 |
< |
() -> { |
1070 |
< |
StampedLock sl = new StampedLock(); |
1071 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1072 |
< |
sl.readLock(); |
1073 |
< |
sl.unlock(stamp); |
1074 |
< |
}, |
1075 |
< |
() -> { |
1076 |
< |
StampedLock sl = new StampedLock(); |
1077 |
< |
sl.readLock(); |
1078 |
< |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1079 |
< |
sl.readLock(); |
1080 |
< |
sl.unlock(stamp); |
1081 |
< |
}, |
1082 |
< |
}; |
1083 |
< |
|
1084 |
< |
assertThrows(IllegalMonitorStateException.class, actions); |
985 |
> |
{ |
986 |
> |
StampedLock sl = new StampedLock(); |
987 |
> |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
988 |
> |
assertThrows(IllegalMonitorStateException.class, |
989 |
> |
() -> sl.unlockRead(stamp)); |
990 |
> |
} |
991 |
> |
{ |
992 |
> |
StampedLock sl = new StampedLock(); |
993 |
> |
long stamp = sl.tryOptimisticRead(); |
994 |
> |
assertThrows(IllegalMonitorStateException.class, |
995 |
> |
() -> sl.unlock(stamp)); |
996 |
> |
} |
997 |
> |
|
998 |
> |
{ |
999 |
> |
StampedLock sl = new StampedLock(); |
1000 |
> |
long stamp = sl.tryOptimisticRead(); |
1001 |
> |
sl.writeLock(); |
1002 |
> |
assertThrows(IllegalMonitorStateException.class, |
1003 |
> |
() -> sl.unlock(stamp)); |
1004 |
> |
} |
1005 |
> |
{ |
1006 |
> |
StampedLock sl = new StampedLock(); |
1007 |
> |
sl.readLock(); |
1008 |
> |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
1009 |
> |
assertThrows(IllegalMonitorStateException.class, |
1010 |
> |
() -> sl.unlockRead(stamp)); |
1011 |
> |
} |
1012 |
> |
{ |
1013 |
> |
StampedLock sl = new StampedLock(); |
1014 |
> |
sl.readLock(); |
1015 |
> |
long stamp = assertValid(sl, sl.tryOptimisticRead()); |
1016 |
> |
assertThrows(IllegalMonitorStateException.class, |
1017 |
> |
() -> sl.unlock(stamp)); |
1018 |
> |
} |
1019 |
> |
|
1020 |
> |
{ |
1021 |
> |
StampedLock sl = new StampedLock(); |
1022 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1023 |
> |
assertValid(sl, stamp); |
1024 |
> |
sl.writeLock(); |
1025 |
> |
assertThrows(IllegalMonitorStateException.class, |
1026 |
> |
() -> sl.unlockWrite(stamp)); |
1027 |
> |
} |
1028 |
> |
{ |
1029 |
> |
StampedLock sl = new StampedLock(); |
1030 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1031 |
> |
sl.writeLock(); |
1032 |
> |
assertThrows(IllegalMonitorStateException.class, |
1033 |
> |
() -> sl.unlock(stamp)); |
1034 |
> |
} |
1035 |
> |
{ |
1036 |
> |
StampedLock sl = new StampedLock(); |
1037 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1038 |
> |
sl.readLock(); |
1039 |
> |
assertThrows(IllegalMonitorStateException.class, |
1040 |
> |
() -> sl.unlockRead(stamp)); |
1041 |
> |
} |
1042 |
> |
{ |
1043 |
> |
StampedLock sl = new StampedLock(); |
1044 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.writeLock()); |
1045 |
> |
sl.readLock(); |
1046 |
> |
assertThrows(IllegalMonitorStateException.class, |
1047 |
> |
() -> sl.unlock(stamp)); |
1048 |
> |
} |
1049 |
> |
|
1050 |
> |
{ |
1051 |
> |
StampedLock sl = new StampedLock(); |
1052 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1053 |
> |
assertValid(sl, stamp); |
1054 |
> |
sl.writeLock(); |
1055 |
> |
assertThrows(IllegalMonitorStateException.class, |
1056 |
> |
() -> sl.unlockWrite(stamp)); |
1057 |
> |
} |
1058 |
> |
{ |
1059 |
> |
StampedLock sl = new StampedLock(); |
1060 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1061 |
> |
sl.writeLock(); |
1062 |
> |
assertThrows(IllegalMonitorStateException.class, |
1063 |
> |
() -> sl.unlock(stamp)); |
1064 |
> |
} |
1065 |
> |
{ |
1066 |
> |
StampedLock sl = new StampedLock(); |
1067 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1068 |
> |
sl.readLock(); |
1069 |
> |
assertThrows(IllegalMonitorStateException.class, |
1070 |
> |
() -> sl.unlockRead(stamp)); |
1071 |
> |
} |
1072 |
> |
{ |
1073 |
> |
StampedLock sl = new StampedLock(); |
1074 |
> |
sl.readLock(); |
1075 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1076 |
> |
assertValid(sl, stamp); |
1077 |
> |
sl.readLock(); |
1078 |
> |
assertThrows(IllegalMonitorStateException.class, |
1079 |
> |
() -> sl.unlockRead(stamp)); |
1080 |
> |
} |
1081 |
> |
{ |
1082 |
> |
StampedLock sl = new StampedLock(); |
1083 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1084 |
> |
sl.readLock(); |
1085 |
> |
assertThrows(IllegalMonitorStateException.class, |
1086 |
> |
() -> sl.unlock(stamp)); |
1087 |
> |
} |
1088 |
> |
{ |
1089 |
> |
StampedLock sl = new StampedLock(); |
1090 |
> |
sl.readLock(); |
1091 |
> |
long stamp = sl.tryConvertToOptimisticRead(sl.readLock()); |
1092 |
> |
sl.readLock(); |
1093 |
> |
assertThrows(IllegalMonitorStateException.class, |
1094 |
> |
() -> sl.unlock(stamp)); |
1095 |
> |
} |
1096 |
|
} |
1097 |
|
|
1098 |
|
static long writeLockInterruptiblyUninterrupted(StampedLock sl) { |