今天看了下java 基础知识。

来源:互联网 发布:如果女朋友是病娇 知乎 编辑:程序博客网 时间:2024/06/06 09:21
1、Lock(ReentrantLock)和Synchronized的区别:
   (1)Lock 和Synchronized都是可重入锁;
   (2)ReentrantLock 是可中断锁(比如等待锁超时等);synchronized 是不可中断的即只能一直等下去;
   (3) 当有多个线程等待锁的时候:Synchronized 是非公平性锁(无法保证等待时间最长的线程获取到锁);
       ReentrantLock和ReentrantReadWriteLock,它默认情况下是非公平锁,但是可以设置为公平锁。
2、ReentrantLock
   ReentrantLock testLock=new ReentrantLock();   //将创建一个公平性锁;
   ReentrantLock testLock=new ReentrantLock(true);   //true时创建一个公平性锁; flase创建一个非公平性锁;
   //ReentrantLock中定义了2个静态内部类,一个是NotFairSync,一个是FairSync
   
二、类加载机制:
1、 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
2、 重点:类加载器。
①类加载的过程:
类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:
     (1) 装载:查找和导入Class文件;
     (2) 链接:把类的二进制数据合并到JRE中;
        (a)校验:检查载入Class文件数据的正确性;
        (b)准备:给类的静态变量分配存储空间;
        (c)解析:将符号引用转成直接引用;
     (3) 初始化:对类的静态变量,静态代码块执行初始化操作;
    
    ②类加载器:
       (1)Bootstrap ClassLoader:
       (2)Extension ClassLoader:
       (3)Application ClassLoader:
      通过查看源码知道,是通过双亲委派来进行类加载的。首先判断方法区里面是否已经加载了该类。
      若没有,通过寻找父类进行加载。若父类为空看是否能够通过Bootstrap 类加载。
      Bootstrap 类还是加载不到则,通过findClass(name)进行加载。

3、涉及到类加载,就会涉及到反射。 



三、线程WATTING和BLOCKED 状态有什么区别?WATTING就是一个线程调用了 Object.wait() 就是在等待别的线程对该对象调用 Object.notify() or Object.notifyAll().
BLOCKED是指线程正在等待获取锁。
总结:BLOCKED 和WAITING 都是非活动线程的状态. WAITING 线程是已经分配到了CPU时间,但是需要等待事件发生所以主动释放了CPU,直到某些事件完成后调用了notify()唤醒, 
也就是WAITTING线程是自己现在不想要CPU时间,但是BLOCKED线程是想要的,但是BLOCKED线程没有获得锁,所以轮不到BLOCKED线程。


四、设计模式:
1、设计模式的六大原则:
    

2、常见的几种设计模式:
    
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html