16 |
|
|
17 |
|
package java.util.concurrent; |
18 |
|
|
19 |
+ |
import java.lang.reflect.Field; |
20 |
|
import java.util.AbstractList; |
21 |
|
import java.util.Arrays; |
22 |
|
import java.util.Collection; |
1524 |
|
} |
1525 |
|
} |
1526 |
|
|
1527 |
< |
// Support for resetting lock while deserializing |
1527 |
> |
/** Initializes the lock; for use when deserializing or cloneing. */ |
1528 |
|
private void resetLock() { |
1529 |
+ |
Field lockField = java.security.AccessController.doPrivileged( |
1530 |
+ |
(java.security.PrivilegedAction<Field>) () -> { |
1531 |
+ |
try { |
1532 |
+ |
Field f = CopyOnWriteArrayList.class |
1533 |
+ |
.getDeclaredField("lock"); |
1534 |
+ |
f.setAccessible(true); |
1535 |
+ |
return f; |
1536 |
+ |
} catch (ReflectiveOperationException e) { |
1537 |
+ |
throw new Error(e); |
1538 |
+ |
}}); |
1539 |
|
try { |
1540 |
< |
java.lang.reflect.Field f = |
1541 |
< |
CopyOnWriteArrayList.class.getDeclaredField("lock"); |
1531 |
< |
f.setAccessible(true); |
1532 |
< |
f.set(this, new Object()); |
1533 |
< |
} catch (ReflectiveOperationException e) { |
1540 |
> |
lockField.set(this, new Object()); |
1541 |
> |
} catch (IllegalAccessException e) { |
1542 |
|
throw new Error(e); |
1543 |
|
} |
1544 |
|
} |