首页 > 编程知识 正文

线程间通信方式有哪些,线程之间如何进行通信

时间:2023-05-05 22:16:55 阅读:59074 作者:1733

我们常说线程间的通信、线程间的合作,根据他的应用场景其实很容易理解;

例如,生产者Demo (消费者),例如队列,根据生活场景为3360

去菜市场买水果。 你是消费者,蔬菜市场是生产者,没有钱。 等我有钱再买。 菜市场里没有水果。 等着水果卖。 这个相互等待的进程是线程之间的通信进程,也就是合作进程。 那么,从以下两个角度或以上的角度解决这个问题,并介绍关键词

1 .从传统的Object类描述:

1 .等待()方法:

2.notify ()方法:

3 .通告全部(方法:

了解当前线程和其他线程,不要混淆这一点。 因为拥有锁定对象的时机不同

一.等待()、通知()、通知全部) )。

协调

三.生产者-消费者模式的实现

如有不正当之处,敬请谅解,并欢迎您的批评指正。

一.wait()、notify()和notifyAll()

wit ()、notify、notifyAll ) )是Object类的方法。

从这三种方法的说明中可以看出。

1 ) wait ()、notify )和notifyAll ) )方法是本地方法,是final方法,因此不能重写。

2 )调用对象的wait ) )方法时,必须阻止当前线程,并且当前线程必须具有对象的monitor (监视器)或锁

3 )调用一个对象的notify ) )方法可以唤醒正在等待该对象的monitor的线程。 如果多个线程正在等待该对象的监视器,则只能唤醒其中一个线程。

4 ) notifyAll ) )调用方法时,将调用等待此对象的所有monitor线程。

朋友可能会怀疑。 为什么这三个不是Thread类声明中的方法,而是在Object类中声明的方法呢? (当然,Thread类继承了Object类,因此Thread也可以调用三个方法。 其实这个问题很简单,因为每个对象都有一个monitor锁,所以应该等待当前线程中对象的锁定,当然应该在这个对象上操作。 与线程交互会非常复杂,因为当前线程可能会等待锁定多个线程,而不是与当前线程交互。

如上所述,对一个对象的wait (wait )方法的调用是同步块或同步方法(synning method ),因为当前线程必须具有该对象的monitor (监视器)或锁

对象的wait ) )方法,表示当前线程传递对象的monitor,进入等待状态,等待再次获得后续对象的锁(Thread类的sleep方法是当前源

notify ) )方法可以唤醒正在等待对象监视器的线程。 如果多个线程正在等待对象的监视器,则只能唤醒其中一个线程。 我不知道具体会唤醒哪个线程。

同样,对notify ) )方法的调用是同步块或同步方法(synchroning method ),因为当前线程也必须具有该对象的monitor

nofityAll ) )方法与notify ) )方法不同,它可以唤醒等待对象的所有monitor线程。

请在这里注意。 notify (和notifyAll ) )方法只是启动正在等待该对象的monitor线程,而不确定哪个线程可以检索monitor。

举个简单的例子,如果三个线程Thread1、Thread2和Thread3正在等待对象objectA的监视器,则Thread4具有对象objectA的监视器,而Thread4中的对象在Thread4中调用objectA.notifyAll ()方法时,将调用三个线程: Thread1、Thread2和Thread3。 哪个线程下一次可以获取objectA监视器取决于操作系统的时间表。

请特别注意。 线程已启动并不意味着它立即获取了对象的监视器。 在调用notify (或notifyAll )退出同步块并释放对象锁之后,剩下的线程可以执行锁定。

请看一个例子。

无论执行多少次,执行结果都如下。

二.Condition

Condition首次出现在java 1.5中,用于实现线程间的协作,而不是传统的Object的wait ()、notify () ),从而实现Object的wait ()、notify ()和Condition1的await 博客中说,阻止队列实际上是使用Condition模拟线程之间的协作。

Condition是接口,基本方法是await ()和signal () )。 Condition依赖于Lock接口,生成Condition的基本代码是Lock.newCondition ()调用Condition的await () )和signal ()方法

Condition的signal ()是对象的通知);

Condition的signalAll ()与Object的notifyAll () )相对应。

三.生产者-消费者模型的实现

使用Object的wait ()和notify ) )实现:

通过Condition实现

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。