java – 在Object类中放置wait(),notify()方法的概念[复制]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在Object类中放置wait(),notify()方法的概念[复制],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3145字,纯文字阅读大概需要5分钟。
内容图文
![java – 在Object类中放置wait(),notify()方法的概念[复制]](/upload/InfoBanner/zyjiaocheng/708/f69c2041ad264ad8befc5bd25a33bb34.jpg)
参见英文答案 > How can the wait() and notify() methods be called on Objects that are not threads? 9个
我只是很难理解将wait()放在Object类中的概念.为了这个问题,请考虑wait()和notifyAll()是否在Thread类中.
class Reader extends Thread {
Calculator c;
public Reader(Calculator calc) {
c = calc;
}
public void run() {
synchronized(c) { //line 9
try {
System.out.println("Waiting for calculation...");
c.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + c.total);
}
}
public static void main(String [] args) {
Calculator calculator = new Calculator();
new Reader(calculator).start();
new Reader(calculator).start();
new Reader(calculator).start();
calculator.start();
}
}
class Calculator extends Thread {
int total;
public void run() {
synchronized(this) { //Line 31
for(int i=0;i<100;i++) {
total += i;
}
notifyAll();
}
}
}
我的问题是它可能有什么不同?在第9行中,我们获取对象c的锁定,然后执行等待,以满足我们需要在使用等待之前获取对象的锁定的等待条件,因此对于notifyAll我们已经获得了对第31行的计算器对象的锁定.
解决方法:
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语言中,对Object的特定实例进行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
// this releases the lock and waits on the associated monitor
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个线程在外部资源上阻塞太多,然后您可以增加数量.推动受攻击的服务器太难,然后减少运行线程的数量.锁定对象确保线程之间的互斥和通信,与运行的线程数量无关.
内容总结
以上是互联网集市为您收集整理的java – 在Object类中放置wait(),notify()方法的概念[复制]全部内容,希望文章能够帮你解决java – 在Object类中放置wait(),notify()方法的概念[复制]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。