昨天下班, 我回来后。由于没有钥匙,于是先到一个待就业的学弟那里做了一下。
首先我们谈了一下最近的就业环境。
后来他就像我问了一个Java基础方面的问题。
Object对象中有那些方法?
呵呵,还别说, 对于这些基础知识本人还是很有信息的。
但是结果还是差强人意。少说了两个方法equals(), clone();
一说起clone(),前不久在公司写的一个native方法,还打算去重载clone()这个方法呢
这里, 给大家和我都留下一个研究的问题。
那就是hashCode这个方法到底有什么用途? 它在C层面是怎么实现的?
这个这次就不做详细的研究了。
好了, 废话有点多了。 呵呵!
在看API文档的时候,我们又谈到了wait与sleep的区别等等。其中,在与他谈论中, 我自己想到一个问题,感觉还是满有意思的。
问题是:为什么wait(), notify()要放在同步快中呢?
Java中每个对象VM都会给它分配一个锁资源。参考源代码,可以知道wait, notify都是native方法,也就是本地方法。这些方法主要的目的是提供不同线程间的一个通信问题!由于这个目的,才会出现这些方法的。也就是说这两个方法VM的多线程设计是密切相关的。
当你在一个方法加上synchronized或同步块的话,VM会对你做一些额外的编码工作。主要是两个点,一个是进入点,一个是出入点。进入口:需要根绝当前对象的锁对象状态做不同的动作。出入口:释放当前对象锁资源。所以方法的同步是比一般的方法所耗费的时间是更久一点的。主要在进入口与出入口这里的额外耗费时间。
下面我对这个问题做一个猜测,当然希望那位大牛能做一个全面的解释。我这里只是猜测! OK! Go.
wait, notify这两个方法主要是因为线程的同步机制才引入的,可以这么说它们是与线程的实现机制是密切相关的。而这两个方法是native方法实现的(参考源代码),也就是说在底层它做了什么我们根本不知道。但是一定会于锁有关系,因为wait方法有这么一个特性:wait住的线程会释放对象锁!从这里我们可以肯定一点wait会进行对象锁的操作!
而线程是一个随机调度的,假设我们不把wait放入同步快中。我来假设线程的一种调用情况:现在有两个线程t1, t2。一个对象obj。当t1调用wait,而wait还没有执行完, t2获得了CPU的时间片,t2也调用了wait()。那么wait将变得不可操作,因为t1,t2可能同时操作了锁资源!这样就会出现问题!
我的结论是:放入同步快中,主要是为了让wait与notify具有线性安全! 有的人可能会问,那为什么不在该方法前加同步关键字呢?呵呵!这是不可以的,因为它们是native方法, native方法的调用与Java的一般方法是有区别的。具体你可以去看<深入Java虚拟机>!
好了,这次就写到这里了。 最近正在研究公司的虚拟机, 若我有更好的解释我会继续发文章的!
分享到:
相关推荐
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
Java 中Object的wait() notify() notifyAll()方法使用 在Java并发编程中,Object的wait()、notify()和notifyAll()方法是非常重要的概念,这三个方法都是Object类的方法,可以认为任意一个Object都是一种资源(或者...
Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 一、wait()方法 wait()方法是使当前线程自动...
wait方法是Object类的一个方法,用于让当前线程进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。在wait方法中,当前线程会释放它所占有的锁,并进入等待状态。wait方法可以带有参数,指定等待的时间...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
`wait()`、`notify()`和`notifyAll()`方法是Java中实现线程同步的关键工具。正确使用它们可以有效避免线程间的竞争条件和死锁问题,同时也能实现线程间的高效通信。在实际开发中,应根据具体的应用场景选择合适的...
Java中的`wait()`, `notify()`, 和 `notifyAll()` 是多线程编程中的关键工具,它们用于在并发环境中协调线程间的交互。这些方法都定义在`java.lang.Object`类中,因为它们与对象的监视器(monitor)概念密切相关。...
Java中的`Object.wait()`、`Object.notify()`以及`Object.notifyAll()`是多线程编程中的核心方法,它们用于实现线程间的协作与通信。这些方法是`Object`类的最终原生(`final native`)方法,这意味着它们的实现位于...
本文将深入探讨`wait`、`notify`以及`notifyAll`这三个关键字的使用及其背后的原理,帮助你理解如何在实际编程中有效地利用它们来解决线程同步问题。 首先,我们需要了解Java中的对象锁。每个Java对象都有一个内置...
本文将深入探讨Java中的wait()、notify()和notifyAll()方法,以及synchronized关键字和原子操作在多线程环境中的应用。 1. **wait()方法**: - wait()是Object类的一个方法,它的作用是让当前线程暂停执行并释放它...
在 Java 中,wait 和 notifyAll 是两个非常重要的方法,它们都是在 Object 类中声明的,用于实现线程之间的通信和同步。wait 方法会使调用线程进入等待状态,并释放所持有的对象锁,而 notifyAll 方法则会去唤醒当前...
首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。这些方法只能在同步环境中(如`synchronized`块或方法)使用,否则会抛出`IllegalMonitorStateException`。它们的...
在提供的压缩包文件`java_sychronization`中,可能包含了一些示例代码,用于演示如何在Java中使用`synchronized`关键字以及`wait()`和`notify()`方法。通过研究这些样例,你可以更深入地了解这些工具的用法和效果。...
在Java中,使用`wait()`, `notify()`, 和 `notifyAll()`必须在同步块或者同步方法中,因为它们涉及到对共享资源的访问。这是为了避免出现竞态条件,确保只有一个线程在执行这些操作。 主线程控制子线程的`wait()`和...
Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...
Java中的`notify`和`notifyAll`是多线程编程中的关键方法,它们用于线程间的通信,特别是在处理同步机制时。这两个方法都是在`Object`类中定义的,因此可以应用于任何Java对象。 首先,我们需要理解Java的同步机制...
通过本示例代码的学习,我们可以深入了解`wait()`与`notify()`方法的工作原理及其在Java多线程编程中的应用。这两个方法通过释放和重新获取锁的方式,有效地实现了线程间的通信和同步,是Java并发控制的重要组成部分...
Java中的多线程编程是构建高效并发应用的关键技术之一,其中`wait()`、`notify()`和`notifyAll()`是Java对象锁机制中的三个关键方法,它们位于`java.lang.Object`类中,主要用于线程间通信。本文将深入探讨`notify()...