Preview:
DESCRIPTION
Citation preview
- 1. Java 16
- 2. 2 aVariable aVariable = 3; aVariable=3
- 3. 3
- 4. 4 JMM JMM JVM
- 5. 5 Java JMM JVMJMM ()
- 6. 6 JMM
- 7. 7 JMM
- 8. 8 public class PossibleReordering { static int x = 0; static
int y = 0; static int a = 0; static int b = 0; public static void
main(String rags[]) throws InterruptedException { Thread one = new
Thread(new Runnable() { @Override public void run() { a = 1; x = b;
} }); Thread other = new Thread(new Runnable() { @Override public
void run() { b = 1; y = b; } }); one.start(); other.start();
one.join(); other.join(); System.out.println("(" + x + "," + y +
")"); }
- 9. 9 (1,0)(1,1)(0,1) (0,0) BA2 0,0
- 10. 10 JMM JMM read/write JMM(happens before) Ans. BA AB
JVM
- 11. 11 or XX )
- 12. 12 private final class Sync extends
AbstractQueuedSynchronizer { private static final int RUNNING = 1;
private static final int RAN = 2; private static final int
CANCELLED = 4; private V result; private Exception exception; void
innerSet(V v) { while (true) { int s = getState(); if
(ranOrCancelled(s)) { return; } if (compareAndSetState(s, RAN)) {
break; } result = v; releaseShared(0); done(); } V innerGet()
throws InterruptedException, ExecutionException {
acquireSharedInterruptibly(0); if (getState() == CANCELLED) { throw
new CancellationException(); } if (exception != null) { throw new
ExecutionException(exception); } return result; } }
- 13. 13 FutureTasktryReleaseShared tryAcquireShared
innerSetreleaseShared(tryReleasedShared)
innerGetacquiredShared(tryAcquireShared )
innerSetresultinnerGetresult
- 14. 14 Resource public class UnsafeLazyInitialization { private
static Resource resource; public static Resource getInstance() { if
(resource == null) { resource = new Resource(); } return resource;
A } B B A } AResourceresource set Bresource Resource
- 15. 15 public class SafeLazyInitialization { private static
Resource resource; public synchronized static Resource
getInstance() { if (resource == null) { resource = new Resource();
} return resource; } }
- 16. 16 getInstance public class ResourceFactory { public static
Resource resource = new Resource(); private static Resource
getResource() { return resource; } Resourcestatic public class
ResourceFactory { private static ResourceHolder { public static
Resource resource = new Resource(); } public static Resource
getResource() { return ResouceHolder.resource; }
- 17. 17 JVM public class DoubleCheckedLocking { private static
Resource resource; public static Resource getInstance() { if
(resource == null) { synchronized (DoubleCheckedLocking.class) { if
(resource == null) { resource = new Resource(); } } return
resource; } }
- 18. 18 1. 2.resourcenull 3.nullnullResource Resource Resource
Resource
- 19. 19 final public class SafeStates { private final Map
states; public SafeStates() { states = new HashMap;
states.put("alaska", "AK"); states.put("alabama", "AL");
states.put("wyoming", "WY"); } public String getAbbreviation(String
s) { return states.get(s); } }
- 20. 20 final( finalfinalHashMap) )statesfinal final
- 21. 21 Java 2@GuardBy