并发编程 常见方法

 

 ------------------------------------------------------------------------------------------------------------------

sleep与yield:

 -----------------------------------------------------------------------------------------------------

join:

Java中,主线程创建一个线程t1,主线程调用t1.join(),主线程是阻塞了吗?

是的,主线程在调用 t1.join() 方法后会被阻塞。这是因为 join() 方法的作用是让当前线程(这里指主线程)等待调用 join() 方法的线程(这里指t1线程)执行完毕。
具体来说,当主线程调用 t1.join() 后,它会暂停执行,直到线程t1执行完毕才会继续执行。这种机制通常用于等待某个线程完成其任务后再进行后续操作,确保线程执行顺序的同步性。

 

在调用 t1.join() 后,主线程确实会被阻塞,直到线程t1执行完毕。一旦线程t1执行完毕,主线程会被重新加入到可执行线程队列中,并且由操作系统的CPU调度器决定何时再次执行主线程的代码。
具体来说:

1.主线程阻塞: 主线程调用 t1.join() 后,它会等待线程t1执行完毕。在这个等待过程中,主线程的执行会暂停,即被阻塞。
2.t1执行完毕: 当线程t1的任务执行完毕,t1会自动退出。此时,主线程的 join() 方法返回,主线程的阻塞状态解除。
3.主线程再次执行: 主线程解除阻塞后,会被重新加入到可执行线程队列中。操作系统的CPU调度器会根据调度策略决定何时再次调度主线程的执行。主线程并不会立即开始执行,而是由CPU调度器安排执行的时间。

总结来说,主线程在调用 t1.join() 后会被阻塞,直到t1执行完毕后解除阻塞。解除阻塞后,主线程会重新参与到CPU的调度中,等待下次被分配执行的机会。

 -----------------------------------------------------------------------------------------------

interrupt:打断正在睡眠(或阻塞)的线程,或者打断其他正在运行的线程

处于阻塞状态的线程:调用了sleep、wait、join方法(join的底层原理就是wait)

interrupt打断正在睡眠的线程(sleep、wait、join),以异常的方式表示被打断了,把打断标记置为false

interrupt打断正常运行的线程,打断标记为true,但实际上被打断的线程还会继续执行,不受影响。我们可以判断打断标记是否为true,如果是的话就让线程自己结束运行

 

posted @ 2024-07-01 14:26  1stzz1  阅读(1)  评论(0编辑  收藏  举报