21
Java 並並並並並並並並並並並 並 16 並 並並 並

Java並行処理プログラミング 第16章ver2

Embed Size (px)

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