方法 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 的使用
[TOC]
ThreadLocal 类
主要解决的是:每个线程绑定自己的变量(存储每个线程的私有数据)。
get():取数据
set():存数据
InheritableThreadLocal
主要解决的是:可以在子线程中取得父线程继承下来的值。
注意:如果子线程在取得值的同时,主线程将 InheritableThreadLocal 中的值进行更改,那么子线程取得的值还是旧值。