Java 多线程 线程如何阻塞
时间: 2023-10-18 09:37:46 浏览: 104
Java 多线程阻断获取任务
Java 中有多种方式可以使线程阻塞,常见的有以下几种:
1. 调用 sleep 方法:调用 Thread 类的 sleep(long millis) 方法可以使当前线程阻塞指定的时间(毫秒),在此期间线程不会释放锁,但是不会占用 CPU 资源,适合在等待一段时间后再继续执行的场景。
2. 调用 wait 方法:调用 Object 类的 wait() 方法可以使当前线程等待,直到其它线程调用该对象的 notify() 或 notifyAll() 方法唤醒该线程,wait() 方法会释放对象锁,进入等待状态,等待其它线程通知。通常 wait() 方法需要和 synchronized 关键字一起使用,确保线程安全。
3. 调用 join 方法:调用 Thread 类的 join() 方法可以使当前线程等待另一个线程执行完毕后再继续执行,join() 方法会阻塞当前线程,等待目标线程执行完毕,然后当前线程才会继续执行。
4. 调用 LockSupport.park 方法:调用 LockSupport 类的 park() 方法可以使当前线程阻塞,直到另一个线程调用该线程的 unpark() 方法唤醒该线程。park() 方法可以用于实现线程间的同步和控制,例如等待某个条件满足后再继续执行。
需要注意的是,线程阻塞和线程挂起是不同的概念。线程阻塞是指线程在等待某个事件发生时被暂停执行,但是线程仍然处于存活状态,可以被唤醒继续执行。线程挂起是指线程被完全暂停,不再占用 CPU 资源,只有接收到特定的信号才能被唤醒。在 Java 中,线程阻塞的方式通常是使用上述几种方法,线程挂起通常是使用操作系统提供的机制,例如 POSIX 中的 sigsuspend() 函数。
阅读全文