java wait在哪个类_java – 在Object类中放置wait(),notify()方法后面的概念

I am just having hard time to understand concept behind putting wait() in object class For this questions sake consider as if wait() and notifyAll() are in thread class

在Java语言中,对一个对象的特定实例wait() – 一个分配给该对象的监视器是精确的。如果你想发送一个信号到一个线程,等待那个特定的对象实例,然后你调用notify()对象。如果要向正在等待该对象实例的所有线程发送信号,请在该对象上使用notifyAll()。

如果wait()和notify()在线程而不是每个线程将必须知道每个其他线程的状态。 thread1如何知道thread2正在等待访问特定资源?如果thread1需要调用thread2.notify(),它必须以某种方式发现thread2正在等待。将需要一些机制,线程注册他们需要的资源或动作,以便其他人可以在准备好或可用时发信号通知他们。

在Java中,对象本身是在线程之间共享的实体,允许它们彼此通信。线程没有彼此的具体知识,它们可以异步运行。他们运行,他们锁定,等待,并通知他们想要访问的对象。他们不知道其他线程,不需要知道他们的状态。他们不需要知道它正在等待资源的thread2 – 他们只是通知资源,并且任何人等待(如果有人)被通知。

在Java中,我们使用锁对象作为线程之间的同步,互斥和通信点。我们在锁对象上同步,以获得对重要代码块的互斥锁访问和同步内存。如果我们等待某些条件更改,我们等待一个对象 – 一些资源可用。如果我们想唤醒睡眠线程,我们会通知一个对象。

// locks should be final objects so the object instance we are synchronizing on,

// never changes

private final Object lock = new Object();

...

// ensure that the thread has a mutex lock on some key code

synchronized (lock) {

...

// i need to wait for other threads to finish with some resource

lock.wait();

...

// i need to signal another thread that some state has changed and they can

// awake and continue to run

lock.notify();

}

程序中可以有任何数量的锁定对象 – 每个锁定一个特定的资源或代码段。你可能有100个锁对象,只有4个线程。当线程运行程序的各个部分时,它们可以独占访问其中一个锁定对象。再次,他们不必知道其他线程的运行状态。

这允许您按照需要在软件中扩展或减少运行的线程数。你发现4个线程在外部资源上阻塞太多,那么你可以增加数量。推送您的破坏的服务器太硬,然后减少运行线程的数量。锁对象确保线程之间的互斥和通信,而与多少线程正在运行无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值