locksupport.park java
时间: 2024-04-20 16:26:01 浏览: 101
在 Java 中,`LockSupport.park()` 是一个用于线程阻塞的方法。 当线程调用 `LockSupport.park()` 时,它将被阻塞,直到以下三种情况之一发生:
1. 其他线程调用相应线程的 `unpark()` 方法,将其唤醒。
2. 其他线程中断了该线程。
3. 其他线程以“不合理”方式调用 `park()` 方法,即在该线程调用 `park()` 方法之前已经调用了 `unpark()` 方法。
需要注意的是,`LockSupport` 类提供了多种阻塞和唤醒线程的方法,例如 `parkNanos()`、`parkUntil()` 等。这些方法可以根据不同的需求进行使用。
相关问题
名称: Druid-ConnectionPool-Create-1902216702 状态: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@550c55d2上的WAITING 总阻止数: 0, 总等待数: 2 堆栈跟踪: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2800)
这是一个Druid连接池创建连接的线程,等待状态为WAITING,表示该线程正在等待唤醒。该线程所在的类是DruidDataSource,该类是阿里巴巴开源的数据库连接池。堆栈跟踪显示该线程正在等待条件对象,该条件对象可能是等待可用的数据库连接或等待连接池达到最大连接数。该线程的作用是创建和管理数据库连接,保证应用程序的正常运行。
locksupport.park底层实现原理
`LockSupport.park()` 是 Java 并发编程中用于线程阻塞的函数,它可以让当前线程进入等待状态。它底层的实现原理是利用了操作系统提供的底层同步原语。
在 Linux 操作系统中,`LockSupport.park()` 函数会将当前线程放入等待队列中,然后将该线程挂起,直到被唤醒。具体实现方式是利用了操作系统提供的 `futex`(Fast Userspace Mutex)系统调用,该系统调用可以实现用户态线程的阻塞和唤醒。
在 Windows 操作系统中,`LockSupport.park()` 函数会调用 `WaitForSingleObjectEx` 函数将当前线程挂起。这个函数将线程加入到内核对象的等待队列中,并且将线程状态设置为等待状态。当条件满足时,调用 `ReleaseSemaphore` 函数释放等待线程,使得线程重新进入可运行状态。
总之,`LockSupport.park()` 函数的底层实现原理是利用了操作系统提供的底层同步原语,从而实现了线程的阻塞和唤醒。
阅读全文