3 线程间通信

来源:互联网 发布:qq飞车白银帝王数据 编辑:程序博客网 时间:2024/06/16 03:41

3 线程间通信

3.1.3 等待/通知机制的实现

方法wait()的作用是使当前执行代码的线程进行等待。该方法用来将当前线程置入“预执行队列”中,并且在wait()所在的代码处停止执行直到接到通知或被中断为止。调用wait方法钱前,线程必须获得该对象的对象级别锁,即只能在同步方法或者同步块中调用wait()方法。执行wait()方法后,当前线程释放锁。在从wait()返回前,线程与其他线程竞争重新获得锁。

方法notify()也要在同步方法或者同步块中调用,即在调用之前,线程也必须获得该对象的对象级别锁。该方法用来通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则随机挑选一个呈wait状态的线程,并使它获取该对象的对象锁。需要说明的是,在执行notify()方法后,当前对象并不会马上释放该锁,要等到notify()方法的线程执行完,也就是退出synchronizd代码块后,该线程才会释放锁。

notifyAll()方法可以使所有正在等待队列中等待同一资源的全部线程从等待状态中退出,进入可运行状态。

3.2 方法join的使用

方法join()的作用是等待线程对象销毁。

方法join的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期阻塞,等待线程x销毁后再继续执行线程z后面的代码。

3.2.5 方法join(long)和sleep(long)的区别

方法join(long)的功能在内部是使用wait(long)方法来实现,所以join(long)方法具有释放锁的特点。
这里写图片描述
由源码可以了解到,当执行了wait(long)方法后,当前线程的锁被释放,那么其他线程就可以调用此线程中的同步方法了。

3.3 类ThreadLocal的使用

类ThreadLocal解决的是变量在不同线程中的隔离性,也就是不同线程拥有自己的值。

原创粉丝点击