notify等关于线程的方法为什么放在了object类里?

各位大侠,小弟不懂求指教 ,notify等关于线程的方法为什么放在了object类里?

0

1个回答

任何对象都可以被多个线程竞争,此时对象需要同步,所有Object就有了wait,notify等方法

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
wait,notify,notifyAll,sleep这些方法都跟线程的状态变化有关,为什么jdk把前三个方法放在Object类里面,而把sleep放在Thread类里面?
首先,虽然这些方法都跟线程的状态变化有关,但wait(),notify(),notifyAll()这三个方法在用法上就跟sleep()方法不太一样,wait(),notify(),notifyAll()必须在sychronized同步代码块中使用,且要用当前线程持有的锁来调用,比如锁.wait(),锁.notify(),而sleep()方法则是Thread类的一个静态方法,直接通过Thread类调...
为什么wait,notify,notifyAll定义在Object中?
这是个设计相关的问题,它考察的是面试者对现有系统和一些普遍存在但看起来不合理的事物的看法。回答这些问题的时候,你要说明为什么把这些方法放在Object类里是有意义的,还有不把它放在Thread类里的原因。一个很明显的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类...
wait(),notify(),notifyAll()用来操作线程为什么定义在Object类中?
这些方法存在于同步中; 使用这些方法必须标识同步所属的锁; 锁可以是任意对象,所以任意对象调用方法一定定义在Object类中。        Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线...
为什么wait()和notify()属于Object类
关于wait()暂停的是持有锁的对象,所以想调用wait()必须为:对象.wait();notify()唤醒的是等待锁的对象,调用:对象.notify();如下:Object obj = newObject();synchronized(obj){    try{        obj.wait();      }catch(Exception e){}      obj.notify();  }注
为什么wait, notify 和 notifyAll这些方法不在thread类里面?
简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中,因为锁属于对象。
Object类中常见的方法
一.Object类中的toString()方法 1. object 默认方法 toString方法,toString() 输出一个对象的地址字符串(哈希code码)! 2.可以通过重写toString方法,获取对象的属性! 快捷键 alt+shift+s创建Override toString() 二.Object类中的equals()方法 Object类e...
为什么wait与notify设计在Object类中?
答案 因为synchronized关键词(设计的初衷可能是为了简化多线程程序的编写)可以加在每个类的方法之上。 每个对象都有一个monitor(因此每个对象都潜在需要线程同步),虚拟机在执行synchronized修饰的代码块时,需要获取该对象的monitor。 对象同步可以一定程度上通过synchronized(本质上是monitor)完成,而当需要通过“阻塞”、“唤醒”完成对象同步时,s...
Object类中的wait()方法和notify()方法
【Object类中的wait()方法和notify()方法】 wait(): public final void wait(long timeout) throws InterruptedException 参数:等待的时间,可选,不填则默认为0。 说明: 1>使线程主动释放对象锁,并进入等待状态,直到它被其他线程通过notify()或notifyAll唤醒或者超过指定的等待
为什么wait方法在object类中,sleep方法在Thread类中?
今天面试问到了这个问题,没有回答上来。在网上找了yixi
Java中Object类的wait()和notify()方法怎么使用
http://wenwen.soso.com/z/q129287952.htm 看一个生产者-消费者问题 class Test { public static void main(String[] args) { Queue q=new Queue(); Producer p=new Producer(q); Consumer c=new Consumer(q);...
Object的wait、notify来实现线程同步原理
认识Object.wait()方法:        导致当前线程等待,直到该对象的notify或notifyAll被执行。换句话说,这个方法行为效果完全与简单调用wait(0)一样。当前线程必须拥有对象监视器。线程释放对象监视器的所有权,等待直到另一个线程通过调用notify或notifyAll来通知等待对象监视器的线程们并唤醒。然后,当前线程等待重新获取对象监视器并继续执行。因为在一个参数的版
多线程中wait(),notify()和notifyall()方法的含义
在“synchronized(obj){··········}”这个同步块中,obj对象叫做监控器,只有持有监控器这个对象的锁时才会执行同步块中的内容Java中的线程的生命周期大体可分为5种状态。1. 新建(NEW):新创建了一个线程对象。2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选...
线程wait和notify深入学习和分析
我们都知道简单的生产者和消费者的实现就是通过Object内的wait和notify实现的。至于例子暂时不写了。一、前言常见面试题:为什么wait和notify方法是Object类中的方法,而不是在Thread里,毕竟通常我们都是在多线程的时候在使用wait和notify方法。解释:1.首先我们知道生产者和消费者模型里,我们使用的是一个Object lock = new Object()。然后在新起...
java 为什么wait(),notify(),notifyAll()必须在同步(Synchronized)方法/代码块中调用?
先回答问题: (1)为什么wait()必须在同步(Synchronized)方法/代码块中调用? 答:调用wait()就是释放锁,释放锁的前提是必须要先获得锁,先获得锁才能释放锁。 (2)为什么notify(),notifyAll()必须在同步(Synchronized)方法/代码块中调用? 答:notify(),notifyAll()是将锁交给含有wait()方法的线程,让其继续执行下去...
java中Object超类里面的wait()和notify()底层实现
最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java中所有对象的基类,其存在的价值不言而喻,其中wait和notify方法的实现多线程协作提供了保证。 public class WaitNotifyCase { public static void main(String[] args) { final Object l...
深入分析wait/notify为什么要在同步块内
public class WaitNotifyCase { public static void main(String[] args) { // final Object lock = new Object(); final Lock lock = new ReentrantLock(); new Thread(new Runnable() {
为什么wait 和notifyAll 必须要使用synchronized?
    为什么wait 和notifyAll(notify) 必须要使用synchronized? synchronized(object){ object.wait(); }   synchronized(this){ this.wait(); }   synchronized fun(){ this.wait(); }        如...
【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
一、Object中所有方法简介: 在根类Object中包含一下方法:  clone();equals();finalize();getClass();[align=left][/align]notify(),notifyAll();hashCode();toString();wait(); 我们知道所有的类都是继承于Object,所以我们编写的类默认都具有这些方法,究竟这些方法做什么用,
线程通信(wait()、notify()、notifyAll() 方法)
线程通信:程序不能控制线程的轮换执行, 但可以通过一些机制保证线程协调运行. 传统的线程通信 Object类提供了wait(), notify()和notifyAll()三个方法实现线程通信, 它们不属于Thread类. 1. wait(): 导致当前线程等待, 直到其他线程调用该同步监视器的notify()或notifyAll()方法来唤醒该线程(也可以指定等待时间). * 调用wait()方
为什么wait(),notify()和notifyAll()必须在同步块或同步方法中调
我们常用wait(),notify()和notifyAll()方法来进行线程间通信。线程检查一个条件后就行进入等待状态,例如,在“生产者-消费者”模型中,生产者线程发现缓冲区满了就等待,消费者线程通过消费一个产品使得缓冲区有空闲并通知生产者线程。notify()或notifyAll()的调用给一个或多个线程发出通知,告诉它(它们)条件已经发生改变,并且,一旦通知线程离开同步块,所有等待这个对象锁的
使用wait方法和notify方法用于线程间通信的正确姿势
wait/notifyAll
使用Condition类来代替 Object 监视器方法(wait,notify)
java.util.concurrent.locks 包中,规定了三个接口,来代替synchronized和Object的监视器方法,wait,notify。即帮助我们更加灵活的控制线程的状态和同步。至于如何使用Lock请参考ReentrantLock和synchronized的区别Condition 代替Object的监视器方法,wait,notify。Lock  代替synchronized关...
Java 多线程之线程间的通信——wait及notify方法
线程间的相互作用   线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。   Object类中相关的方法有两个notify方法和三个wait方法:   http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html   因为wait和notify方法定义在Object类中,因此会被所有的类所继承。
Object类中的 notifyAll()方法唤醒后,线程怎么执行
在学习线程协作时,大家都会用到notify()或者notifyAll()方法,最初我对于wait()和notifyAll()方法的印象仅仅是对象锁调用wait方法,使线程进入阻塞状态,等待对象锁执行notify方法将其唤醒。继续执行但最近学习一位大牛的视频,无意间发现一个线程执行的顺序好像跟我想象的不太一样。代码如下:1、计数器线程类:2、唤醒线程3、测试类4、控制台输出:分析:如果只是没有唤醒线...
线程中sleep()方法和Object类中的wait()方法的区别
这两者的施加者是有本质区别的. sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制. 而wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",
关于Java多线程中的wait()、sleep()、notify()和notifyAll()的简单介绍和使用
Java多线程的开启使用Thread开启多线程Thread t = new Thread(new Runnable() { @Override public void run() { System.out.println("线程开启"); } }); t.start
Java常见面试题—Object 类中的方法
Object 类中的方法Object() 默认构造方法 clone() 创建并返回此对象的一个副本。 equals(Object obj) 指示某个其他对象是否与此对象“相等”。 hashCode() 返回该对象的哈希码值。 finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
java线程的wait方法和notify方法的运用
一. java Thread类的几个函数的说明:  1.  setPriority( ): 设置线程的优先权;     2 . yield( ): 暂停线程的执行,给其它具有相同优先权的线程执行的机会,若此时没有其它线程执行,则此线程继续执行。这个函数并不会释放锁住的对象。  3.  join( ): 等待加入的线程执行完毕才会执行下一个线程。加入的线程通过interrupt( )来唤醒。
一个简单的例子理解线程的join、wait及 notify方法
例子:现假设有一块钟表对象,钟表有两个线程,一个是查询当前时间,另一个是将时间显示出来。需要显示出正确的时间。 分析:这个题目看起来只是需要简单的实例化一个钟表,然后定义两个线程,并且执行就可以了。于是使用下面的代码: import java.text.SimpleDateFormat; public class Clock { private String currentTime;...
线程中Thread类和Object类的方法
Thread类:start、run、sleep、stopObject类:wait、notify、notifyAll,这三个方法都依赖锁对象,所对象可以是任意对象,所以定义在Object中start()和run()的区别start():启动线程并调用线程中的run()方法。run():执行该线程对象要执行的任务sleep()和wait()的区别sleep():不释放锁对象,释放CPU使用权在休眠的时...
为什么wait()和notify()必须放在synchronized里面?
我们都知道在调用Object.wait()时必须在synchronized块里面,否则会抛出 IllegalMonitorStateException。但是为什么会有该限制,为什么wait()和notify()同时出现才有意义。wait()往往需要在condition上面协同使用,如果condition不能满足,那么将一直等待。所以一般是这样使用:if(!condition){ step1 wai...
Object对象方法之wait与notify
Object对象方法之wait与notify 本文首发于https://www.jianshu.com/p/18769b7dc46f 道生一,一生二,二生三,三生万物。 老子《道德经》 Java是单继承模型,有类似于老子的道德经的哲学,所有的类最终都会继承自一个原始类,这个类就是Object。 Object对象中总共有11个可供protect或public方法。除去toSt...
Object的notify和notifyAll方法的区别
区别 notify:只会唤醒等待该锁的其中一个线程。 notifyAll:唤醒等待该锁的所有线程。 既然notify会唤醒一个线程,并获取锁,notifyAll会唤醒所有线程并根据算法选取其中一个线程获取锁,那最终结果不都是只有一个线程获取锁吗?那JDK为什么还需要做出来这两个方法呢?这两种同步方法本质上会有什么区别? 这还要从对象内部锁的调度说起。 对象内部锁 其实,每个对象都拥有两个池,分...
Java多线程notify/notifyAll唤醒的是谁
涉及JAVA线程的状态问题, 不清楚的可以参考我的另一篇: https://blog.csdn.net/q5706503/article/details/84350887 我们知道notify是Object的本地final方法,无法被重写, 用来唤醒线程, 那么该怎么用, 唤醒的又是谁呢? 用一句话做答复 : notify唤醒的是其所在锁所阻塞的线程 不理解看下面的分析和例子: wait...
线程中的一些常用方法的用法 join()、yield()、sleep()、wait()、notify()、notifyAll()
1.线程休眠sleep();:线程有优先级,但是我们可以用此方法人为的改变它们的优先级,让线程暂停,它其他线程获得分配空间。 用法:Thread.sleep(2000);//休眠两秒 2.线程让步yield();就是让出自己的分配空间给其他线程,那么问题来了,让步多久呢?如果有两条线程的话,是不是让步到另外一条线程执行完呢?经测试,不是让另外的线程执行,让步时间是不确定的。 用法:一般都是指定
多线程中的notify和wait方法的使用
JAVA线程同步中wait()和notify()简洁例子 搞懂这两个的用法之前,请你务必搞懂线程同步的道理,否则,下面这一大篇你应该是看不懂的。 wait()和notify()一系列的方法,是属于对象的,不是属于线程的。它们用在线程同步时,synchronized语句块中。 我们都知道,在synchronized语句块中,同一个对象,一个线程在执行完这一块代码之前,另一个线程,如果传进来的是...
java线程之间的通信(wait/notify)
    在多线程开发过程中,每一个线程拥有自己的栈空间,就如同运行脚本程序一样,一行一行的运行直到最后结束。但是在线程运行过程中只是孤立的运行显得太单调,如果多线程之间可以相互协调工作才显得跟丰富。    线程之间怎么通信呢?本文主要讲述通过Object类提供的wait和notify两个函数,并结合synchronized关键字来实现线程之间的通信,文章最后通过一道面试题来进行总结。    在Ob...
使用Object类中的wait()和notify()方法实现生产者和消费者模式
生产者消费者模式,在实际的开发过程中经常会遇到,平常我们接触到的例如ActiveMQ就是一个一个典型的生产者消费者模式。为了更好的理解生产者和消费这模式,下面通过自己定义的一个消息类、结合Object对象中的wait()和notify()方法实现一个简单的生产者消费者模式。   首先定义一个消息类Info. package com.test.consumer; /** * @生产消息类
java多线程并发之wait、nitifyAll方法
一、前言在上篇博客中介绍了synchronized的常见操作,不过还有一点没有介绍到,那就是关于线程的等待和唤醒,因此本篇就介绍这两个方法二、由来在介绍wait、notify方法之前,我们需要知道为什么会有这个方法。在Java中,每个对象都有个对象锁标志(Object lock flag)与之相关联,当一个线程A调用对象的一段synchronized代码时, 它首先要获取与这个对象关联的对象锁
java wait和notify时不起作用要注意的事项。
1. wait和notify永远都是要synchronized块里面执行的 synchronized(对象){ 对象.wait(); // 或者 对象.notify();  }   2. synchronized中的对象不能被修改,之前就是使用一个静态变量,然后修改它的值 ,结果就不起作用了,永远不能notify了。最好是使用final或者以参数的形式传递进去
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java中关于线程的学习 关于大数据培训