java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent.locks
类 LockSupport

java.lang.Object
  继承者 java.util.concurrent.locks.LockSupport

public class LockSupport
extends Object

用来创建锁定和其他同步类的基本线程阻塞原语。

此类与每个使用它的线程关联,这是一种许可(从 Semaphore 类的意义上说)。如果该许可可用,并且可在进程中使用,则调用 park 将立即返回;否则可能 阻塞。如果许可尚不可用,则可以调用 unpark 使其可用。(但与 Semaphore 不同的是许可不能累积。最多只能有一个。)

parkunpark 方法提供了阻塞和解除阻塞线程的有效方法,并且不会遇到导致不被赞成的方法 Thread.suspendThread.resume 因为以下目的变得不可用的问题:由于许可的存在,调用 park 的线程和另一个试图将其 unpark 的线程之间的竞争将保持活性。此外,如果调用方线程被中断,并且支持超时,则 park 将返回。park 方法还可以在其他任何时间“无缘无故”地返回,因此通常必须在复查返回条件的循环里调用此方法。从这个意义上说,park 是“忙碌等待”的一种优化,并且不会浪费这么多的时间进行自旋,但是必须将它与 unpark 配对使用才更高效。

这些方法用作创建更高级的同步实用程序的工具,其本身对于大多数并发控制应用程序没有用处。

示例用法。 以下是一个先进先出非重入锁定类的概述。

 class FIFOMutex {
   private AtomicBoolean locked = new AtomicBoolean(false);
   private Queue<Thread> waiters = new ConcurrentLinkedQueue<Thread>();

   public void lock() { 
     boolean wasInterrupted = false;
     Thread current = Thread.currentThread();
     waiters.add(current);

     // Block while not first in queue or cannot acquire lock
     while (waiters.peek() != current || 
            !locked.compareAndSet(false, true)) { 
        LockSupport.park();
        if (Thread.interrupted()) // ignore interrupts while waiting
          wasInterrupted = true;
     }

     waiters.remove();
     if (wasInterrupted)          // reassert interrupt status on exit
        current.interrupt();
   }

   public void unlock() {
     locked.set(false);
     LockSupport.unpark(waiters.peek());
   } 
 }
 


方法摘要
static void park()
          出于线程调度目的禁用当前线程,除非许可可用。
static void parkNanos(long nanos)
          在到达指定的等待时间前,出于线程调度目的,将禁用当前线程,除非许可可用。
static void parkUntil(long deadline)
          在指定的最后期限之前,出于线程调度目的,将禁用当前线程,除非许可可用。
static void unpark(Thread thread)
          如果给定线程的许可尚不可用,则使其可用。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

unpark

public static void unpark(Thread thread)
如果给定线程的许可尚不可用,则使其可用。如果线程之前在 park 上受阻塞,则它将解除其阻塞状态。否则,保证下一次调用 park 将不会受阻塞。如果给定线程尚未启动,则根本无法保证此操作是有效的。

参数:
thread - 要执行 unpark 操作的线程,或者该参数为 null(在这种情况下此操作无效)。

park

public static void park()
出于线程调度目的禁用当前线程,除非许可可用。

如果许可可用,则使用该许可,并且调用立即返回;否则,出于线程调度目的,将禁用当前线程,并且在发生以下三种情况之一以前,该线程将一直处于休眠状态:

  • 其他某个线程以当前线程为目标调用 unpark;或者
  • 其他某个线程中断当前线程;或者
  • 该调用不合逻辑地(即无缘无故地)返回。

此方法并 报告是哪个线程导致该方法返回。调用方应该复查最先导致线程停止的条件。例如,调用方也可以确定线程返回时的中断状态。


parkNanos

public static void parkNanos(long nanos)
在到达指定的等待时间前,出于线程调度目的,将禁用当前线程,除非许可可用。

如果许可可用,则使用该许可,并且该调用立即返回;否则,出于线程调度目的,将禁用当前线程,并且且在发生以下四种情况之一以前,该线程将一直处于休眠状态:

  • 其他某个线程以当前线程为目标调用 unpark;或者
  • 其他某个线程中断当前线程;或者
  • 已超过指定的等待时间;或者
  • 该调用不合逻辑地(即无缘无故地)返回。

此方法并 报告是哪个线程导致该方法返回。调用方应该复查最先导致线程停止的条件。例如,调用方也可以确定线程返回时的中断状态或所用的时间。

参数:
nanos - 要等待的最长毫微秒数

parkUntil

public static void parkUntil(long deadline)
在指定的最后期限之前,出于线程调度目的,将禁用当前线程,除非许可可用。

如果许可可用,则使用该许可,并且调用立即返回;否则,出于线程调度目的,将禁用当前线程,并且在发生以下四种情况之一以前,该线程将一直处于休眠状态:

  • 其他某个线程以当前线程为目标调用 unpark;或者
  • 其他某个线程中断当前线程;或者
  • 指定的最后期限已过;或者
  • 该调用不合逻辑地(即无缘无故地)返回。

此方法并 报告是哪个线程导致该方法返回。调用方应该复查最先导致线程停止的条件。例如,调用方也可以确定线程返回时的中断状态或当前时间。

参数:
deadline - 要等待的绝对时间,用相对于历元的毫秒数值表示

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策