Java编程语言为线程之间的通信提供了多种机制。
这些方法中最基本的一种方法是synchronization,它是使用monitors 监视器来实现的。
Java中的每个对象都与一个监视器相关联,一个线程可以锁定或解锁该监视器。
一次只有一个线程可以保持监视器上的锁。
试图锁定该监视器的任何其他线程将被阻止,直到它们能够获得该监视器的锁定。
线程 可以多次锁定特定的监视器;每次解锁都会反转一个锁定操作的效果。

synchronized语句计算对对象的引用。
然后,它尝试在该对象的监视器上执行锁定操作,在锁定操作成功完成之前不会继续进行。
在执行了锁定动作后,将执行 synchronized 语句的主体。
如果主体的执行已完成,无论是正常的或突然,都将在同一监视器上自动执行解锁操作。

synchronized 方法在被调用时自动执行锁定操作;在锁定操作成功完成之前,不会执行其主体。
如果该方法是一个实例方法,那么它将锁定与被调用它的实例关联的监视器(即,在执行方法主体期间将被称为 this 的对象)。
如果方法是static,则它将锁定与表示定义方法的类的Class对象关联的监视器。
如果方法主体的执行已经完成,无论是正常完成或是突然完成,都在同一监视器上自动执行解锁操作。

Java编程语言既不阻止也不需要检测死锁条件。
线程(直接或间接地)在多个对象上保持锁定的程序应该使用传统的避免死锁的技术,并在必要时创建不发生死锁的更高级别的锁定原语。

其他机制,如易失性变量的读写和 java.util.concurrent

java.util.concurrent

Interfaces

  • BlockingDeque
  • BlockingQueue
  • Callable
  • CompletableFuture.AsynchronousCompletionTask
  • CompletionService
  • CompletionStage
  • ConcurrentMap
  • ConcurrentNavigableMap
  • Delayed
  • Executor
  • ExecutorService
  • ForkJoinPool.ForkJoinWorkerThreadFactory
  • ForkJoinPool.ManagedBlocker
  • Future
  • RejectedExecutionHandler
  • RunnableFuture
  • RunnableScheduledFuture
  • ScheduledExecutorService
  • ScheduledFuture
  • ThreadFactory
  • TransferQueue

Classes

  • AbstractExecutorService
  • ArrayBlockingQueue
  • CompletableFuture
  • ConcurrentHashMap
  • ConcurrentHashMap.KeySetView
  • ConcurrentLinkedDeque
  • ConcurrentLinkedQueue
  • ConcurrentSkipListMap
  • ConcurrentSkipListSet
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • CountDownLatch
  • CountedCompleter
  • CyclicBarrier
  • DelayQueue
  • Exchanger
  • ExecutorCompletionService
  • Executors
  • ForkJoinPool
  • ForkJoinTask
  • ForkJoinWorkerThread
  • FutureTask
  • LinkedBlockingDeque
  • LinkedBlockingQueue
  • LinkedTransferQueue
  • Phaser
  • PriorityBlockingQueue
  • RecursiveAction
  • RecursiveTask
  • ScheduledThreadPoolExecutor
  • Semaphore
  • SynchronousQueue
  • ThreadLocalRandom
  • ThreadPoolExecutor
  • ThreadPoolExecutor.AbortPolicy
  • ThreadPoolExecutor.CallerRunsPolicy
  • ThreadPoolExecutor.DiscardOldestPolicy
  • ThreadPoolExecutor.DiscardPolicy

Enums

  • TimeUnit

Exceptions

  • BrokenBarrierException
  • CancellationException
  • CompletionException
  • ExecutionException
  • RejectedExecutionException
  • TimeoutException