Join() 方法 & ThreadLocal 类的使用

本文介绍了Java中线程控制方法join与sleep的区别,并详细解释了ThreadLocal与InheritableThreadLocal类的使用方法,帮助读者理解如何有效地管理和控制线程间的同步与局部变量的传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法 Join 的使用

join() & join(long)方法

join()作用:在 A 线程中调用了 B 线程的 join() 方法时,表示只有当 B 线程执行完毕时, A 线程才能继续执行

join(long)作用:如果 A 线程中调用 B 线程的 join(10),则表示 A 线程会等待 B 线程执行10毫秒,10毫秒过后,A、B线程并行执行

注意:join(0)等价于join()

何时调用:join 方法必须在线程 start 方法调用之后调用才有意义。

join 与 synchronized 的区别:

join 在内部使用 wait() 方法进行等待,而 synchronized 使用的是”对象监视器“原理作为同步

join(long) 与 sleep(long) 的区别:

join(long) 会释放锁,而 sleep(long) 不释放锁

例如:A 线程中调用了 B 线程的 join 方法,则相当于 A 线程调用了 B 线程的 wait 方法,调用之后 A 线程就会进入阻塞状态(释放 A 线程的锁),当 B 线程执行完(或者到达等待时间),B 线程会自动调用自身的 notifyAll 方法唤醒 A 线程,从而达到同步的目的。

类 ThreadLocal & InheritableThreadLocal 的使用

ThreadLocal 类

主要解决的是:每个线程绑定自己的变量(存储每个线程的私有数据)。

get():取数据

set():存数据

InheritableThreadLocal

主要解决的是:可以在子线程中取得父线程继承下来的值。

注意:如果子线程在取得值的同时,主线程将 InheritableThreadLocal 中的值进行更改,那么子线程取得的值还是旧值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值