视频 常见方法-interrupt-打断park
park线程是什么?
在Java中,"park线程"通常指的是Java并发包(java.util.concurrent包)中的 LockSupport 类的相关方法,特别是 park() 和 unpark(Thread thread) 方法。
LockSupport 类提供了线程阻塞和解除阻塞的功能,这些功能不依赖于任何对象,而是直接与线程关联。
1.park() 方法:
park() 方法可以使当前线程进入等待状态(阻塞),直到被唤醒或者中断。它可以通过调用 unpark(Thread thread) 方法来解除阻塞。
如果在调用 park() 方法之前已经调用了 unpark(Thread thread) 方法,那么调用 park() 方法将立即返回而不会阻塞。
2.unpark(Thread thread) 方法:
unpark(Thread thread) 方法可以使指定线程恢复运行(解除阻塞)。
如果线程在调用 park() 方法之前已经调用过 unpark(Thread thread) 方法,那么即使 park() 方法还没有被调用,线程也不会进入阻塞状态。
使用场景
线程同步机制: 可以通过 park() 和 unpark(Thread thread) 方法来实现更灵活和精确的线程控制和同步。
任务调度: 在某些并发编程场景下,LockSupport 可以用于更细粒度地控制线程的执行顺序和状态转换。
示例
import java.util.concurrent.locks.LockSupport;
public class ParkThreadExample {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
System.out.println("Thread t1 is starting...");
// 将当前线程 t1 进行阻塞
LockSupport.park();
System.out.println("Thread t1 is unparked.");
});
t1.start();
// 主线程等待一段时间后再解除 t1 的阻塞
Thread.sleep(2000);
// 解除线程 t1 的阻塞
LockSupport.unpark(t1);
}
}
在这个示例中,线程 t1 在启动后调用 park() 方法被阻塞,主线程等待2秒后调用 unpark(t1) 方法解除 t1 的阻塞状态,使得 t1 线程能够继续执行。
总结来说,"park线程"通常是指通过 LockSupport 类的 park() 和 unpark(Thread thread) 方法实现的一种线程阻塞和解除阻塞机制,用于更精细地控制线程的执行状态。
如果在调用 park() 方法之前已经调用了 unpark(Thread thread) 方法,那么调用 park() 方法将立即返回而不会阻塞。这句话什么意思?
这句话的意思是:在调用 LockSupport.park() 方法之前,如果已经对相应的线程调用了 LockSupport.unpark(Thread thread) 方法,那么此时再调用 park() 方法时,线程不会进入阻塞状态,而是会立即返回继续执行后续的代码。
具体来说:
当一个线程调用了 unpark(Thread thread) 方法,如果这个线程之后调用了 park() 方法,那么 park() 方法会立即返回,不会使线程阻塞,而是直接继续执行。
多次调用 unpark(Thread thread) 方法并不会累加作用,每个线程只需要一次 unpark() 来解除由 park() 方法导致的阻塞状态。
这种机制使得 LockSupport 提供了一种更灵活的线程同步和控制方式,可以更精确地控制线程的暂停和恢复,而不像传统的 wait() 和 notify() 那样需要成对使用,且容易导致死锁或无法正常唤醒的情况。
标签:调用,Thread,编程,park,unpark,线程,interrupt,方法 From: https://www.cnblogs.com/gagaya2/p/18280952