今天看了下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)进行加载。
(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
阅读全文
0 0
- 今天看了下java 基础知识。
- 今天看了看JAVA,
- 今天复习了一下java的基础知识。
- 今天看了《金刚》,感动了一下下。。
- 今天看了霍元甲
- 今天看没有了
- 今天看了Struts的源码,总结下。
- 今天累了,休息看了下书法,慢慢的写了下,感觉不错
- 今天看了ps的简介,决定一定要把它给学会,首先了解一下基础知识
- 今天看了一下 《租妻》
- 今天看亚运了吗
- 今天去看了看招聘会
- 今天自学一些逆向的基础知识,看了xchg指令,写了一个简单的 临界区 demo
- 今天又看了下快速排序顺便写下了代码
- 恩,今天把git和sublime结合了一下。。然后看了下《西部世界》
- 今天下了小雨
- 今天看了关于重载与多态的文章,觉得不错,分享下
- 今天用AJAX实现了一个WEBIM,大家看下,请指教
- Gym 101194D Ice Cream Tower (双指针扫描)
- 一个JAVA程序员应该掌握的10项技能
- 数据结构之循环队列
- 第八章 线程控制及操作(一)
- c++运算符重载总结
- 今天看了下java 基础知识。
- js继承
- 你应当拥有的8个PHP质量保证工具 — SitePoint
- 创建标签库描述文件
- js作用域
- java8再学习之泛型
- Unity---脚本生命周期详解
- Java中Connection集合简介
- js的面向对象