A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李小锋 中级黑马   /  2012-12-9 09:23  /  1717 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李小锋 于 2012-12-9 15:06 编辑
  1. class MyLock
  2. {
  3.         static Object locka = new Object();
  4.         static Object lockb = new Object();
  5. }
复制代码
视频中死锁的例子里面这个类有什么作用?为什么要这样定义呢?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
作为万类之首的Object类,Object类定义在Object.java文件,属于包java.lang。
Object类有一个私有方法private static native void registerNatives().
native是java语言的一个关键字.使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用.JDK的源代码中并不包含这些函数的实现体,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的.
public class Object {
    private static native void registerNatives();
    static {
        registerNatives();
    }

    //Java编写的任何类都有一个对应的class对象。比如如果我们编写一个MyString类,那么编译器就会创建一个MyString.class文件,该文件保存了对应于MyString类的Class对象。由于MyString类继承自Object,因此也就继承了下面的这个方法。可以通过调用这个方法获得对应的Class对象。Class对象里面保存了MyString类的信息。后面会仔细总结Class对象的作用。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为synchronzied这个锁需要对象,  死锁发生的情况是 需要2个不同的锁  ,这样才能发生锁嵌套, 老师就通过超类(所有对象的父类)object定义了2个不同的锁, 而加static这是为了调用方便。 不需要重新new对象出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马