java 概念知识

  1. 检测一个线程是否拥有锁:

    Java.lang.Tread 中的 holdsLock 方法:

     public static native boolean holdsLock(Object obj);

    返回true :线程拥有某个对象的锁

    Thread.currentThread().holdsLock(this)

  2. wait,notify,notifyall() 在 object 里面,不在Thread

    java 提供的锁是对象级的,而不是线程级的,每个对象都有锁,通过线程获得,如果线程需要等待某些锁

    那么调用对象中的wait 方法就有意义,,如果定义在Thread中,线程等待的那个锁就不明显了,总结:wait,

    notify,notifyall,都是锁基本的操作,所以他们定义在Object中因为锁属于对象

    调用wait,notify,notifyall 的线程必须拥有对象锁(java api 规定,防止竞争条件)

  3. 判断一个 类是否相等

    1. 包名,类名

    2. 类加载器

  4.  LockSupport.park()和unpark(),与object.wait()和notify()的区别?

    1.  面向的主体不一样。LockSuport主要是针对Thread进进行阻塞处理,可以指定阻塞队列的目标对象,每次可以指定具体的线程唤醒。Object.wait()是以对象为纬度,阻塞当前的线程和唤醒单个(随机)或者所有线程。

    2.  实现机制不同。虽然LockSuport可以指定monitor的object对象,但和object.wait(),两者的阻塞队列并不交叉。可以看下测试例子。object.notifyAll()不能唤醒LockSupport的阻塞Thread.



你可能感兴趣的:(java 概念知识)