2018年8月7日

摘要: new 一个对象的时候,会首先判断该类是否已经完成加载 把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型 类的整个生命周期:加载、验证、准备、解析、初始化、使用、卸载 验证、准备、解析又统称为连接 类的加载时机 初始化之前必须加 阅读全文
posted @ 2018-08-07 17:00 dddjp 阅读(387) 评论(0) 推荐(0) 编辑
 
摘要: Student student = new Student(); student.study(); (1)对象的创建 ①检查new指令的参数是否能在常量池中定位到一个类的符号引用,检查符号引用代表的类是否已经加载、解析和初始化 类的加载机制 ②虚拟机为新生对象分配内存,对象所需内存的大小在类加载之后 阅读全文
posted @ 2018-08-07 16:57 dddjp 阅读(1518) 评论(0) 推荐(0) 编辑
 
摘要: (1)高速缓存 使读写速度尽可能快 在多处理器系统中,每个处理器都有自己的高速缓存,而他们又共享统一主存 缓存中数据不一致问题 有一些协议 (2)指令重排序 处理器对输入的代码进行乱序执行优化,处理器在计算之后将乱序执行的结果重组,保证乱序执行的结果和顺序执行的结果是一致的 Java内存模型JMM 阅读全文
posted @ 2018-08-07 12:15 dddjp 阅读(918) 评论(0) 推荐(0) 编辑
 
摘要: 在构造器返回之前,其它线程就持有该对象的引用, 其它线程持有的该对象的引用指向一个尚未构造完成的对象 何时产生? 在构造器中启动一个新的线程或者在构造器中创建匿名类对象并发布时,容易产生this逃逸 使用尚未构造完全的对象的引用,会产生问题 this引用逃逸是一件很危险的事情,其他线程有可能通过这个 阅读全文
posted @ 2018-08-07 12:15 dddjp 阅读(241) 评论(0) 推荐(0) 编辑

2018年8月6日

摘要: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 是系统进行资源分配和调度的基本单位 是系统中正在运行的一个用不程序 进程是程序执行的一个实例 线程是进程的一个实体 是CPU调度的基本单位 线程是比进程更小的能独立运行的基本单位 线程只拥有少量运行过程中必不可少的资源(程序计数器) 同一 阅读全文
posted @ 2018-08-06 23:48 dddjp 阅读(187) 评论(0) 推荐(0) 编辑
 
摘要: 1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口) 2.实现Runnable接口,重写run方法 3.实现Callable接口,重写call方法(有返回值) 4.使用线程池(有返回值) 1.继承Thread类,重写run方法 每次创建一个新的线程,都要新建一 阅读全文
posted @ 2018-08-06 23:33 dddjp 阅读(32437) 评论(1) 推荐(0) 编辑
 
摘要: 1.可重入锁 synchronized和Lock都是可重入锁 表明了锁的分配机制是基于线程,而不是基于方法 例如,在一个同步方法中调用了另一个同步方法,再进入第二个同步方法时,不需要重新申请锁 2.可中断锁 synchronized是不可中断的。 一个线程已经获得了某对象的锁,另一个线程想获得该对象 阅读全文
posted @ 2018-08-06 23:11 dddjp 阅读(245) 评论(0) 推荐(0) 编辑
 
摘要: synchronized Java关键字 同步代码块、同步方法、静态同步方法 一个代码块或者一个方法被synchronized关键字修饰之后,如果一个线程获得了当前对象的monitor之后,就执行该代码块或方法,其它线程一直等待(阻塞) 获得对象锁的线程何时释放锁? (1)同步代码块或者同步方法执行 阅读全文
posted @ 2018-08-06 22:12 dddjp 阅读(175) 评论(0) 推荐(0) 编辑
 
摘要: jdk1.5之后 java.util.concurrent.locks.Lock Lock接口 方法:lock unlock newCondition tryLock tryLock(?) lockInterruptibly 实现类:ReentrantLock ReadLock WriteLock 阅读全文
posted @ 2018-08-06 21:04 dddjp 阅读(1451) 评论(0) 推荐(0) 编辑
 
摘要: Java中的每一个对象都有一个监视器 Object类的wait和notify、notifyAll方法必须在synchronized块中调用 调用一个对象的notify、notifyAll方法时,当前线程必须持有该对象的监视器monitor,否则抛出IllegalMonitorStateExcepti 阅读全文
posted @ 2018-08-06 20:46 dddjp 阅读(499) 评论(0) 推荐(0) 编辑