Java一些基础知识

2019-04-07  本文已影响0人  hTangle

JAVA

类加载器

  1. 根类加载器:jre/lib
  2. 扩展类加载器:jre/lib/ext扩展类库
  3. 应用类加载器:用户自己定义的类

双亲委派模型

protected Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException
{
    synchronized (getClassLoadingLock(name)) {
        // First, check if the class has already been loaded
        Class<?> c = findLoadedClass(name);
        if (c == null) {
            long t0 = System.nanoTime();
            try {
                if (parent != null) {
                    c = parent.loadClass(name, false);
                } else {
                    c = findBootstrapClassOrNull(name);
                }
            } catch (ClassNotFoundException e) {
            }

            if (c == null) {
                // If still not found, then invoke findClass in order
                // to find the class.
                long t1 = System.nanoTime();
                c = findClass(name);

                // this is the defining class loader; record the stats
                sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                sun.misc.PerfCounter.getFindClasses().increment();
            }
        }
        if (resolve) {
            resolveClass(c);
        }
        return c;
    }
}

IO:同步,阻塞
NIO:同步非阻塞

Channel:流
Buffer:从流中读写数据
Selector:注册到很多个Channel上,监听每个Channel上发生的事件,根据情况决定Channel的读写,可以通过一个线程管理多个Channel
阻塞模式下注册操作不允许

AIO:异步,非阻塞
IO操作完成以后再给线程发送通知。

红黑树和平衡二叉树的区别

避免死锁的集中2方式

  1. 设置加锁顺序
  2. 设置加锁时限,超时不再获取锁
  3. 死锁检测:

死锁存在条件

  1. 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
  2. 请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  3. 不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
  4. 循环等待条件: 若干进程间形成首尾相接循环等待资源的关系

Java8 default static特性-接口使用

线程执行到临界区的时候,会利用CAS将线程ID插入到Markword中,同时修改偏向锁的标志位(会在对象头和栈中的锁记录里存储偏向的线程ID)
CAS是乐观锁机制,读数据不加锁,写数据加锁,比较原值是否修改,ABA问题:版本号
锁只能升级不能降级

上一篇 下一篇

猜你喜欢

热点阅读