摘要:
1 设计模式 (1) 单例模式 保证一个类只能一个对象实现。正常的单例模式分为懒汉式和饿汉式,饿汉式就是把单例声明称static a=new A(),系统第一次调用的时候生成(包括调用该类的其他静态资源也会生成),懒汉式就是系统调用get函数的时候,加个锁判断单例对象是否存在,存在就返回不存在就声明 阅读全文
摘要:
1 并发容器 (1)ConcurrentHashMap 把整个hashmap 分成若干个小的hashmap(segment),每个segment自己加锁(用ReentrantLock),put的时候采用while(trylock()),tryLock是底层是使用cas竞争资源,会一直等待锁资源而不会 阅读全文
摘要:
1 无锁 (1) cas (compare and swap) 设置值的时候,会比较当前值和当时拿到的值是否相同,如果相同则设值,不同则拿新值重复过程;注意,在设置值的时候,取值+比较+设值 是一条cpu语句,在这个过程中不会有其他线程干扰,是原子操作。从指令层面保证操作可靠。CAS有3个操作数,内 阅读全文
摘要:
1 可以手动实现一个最简单的线程池,不考虑性能和等待机制等。public class Worker extends Thread { private LkThreadPool pool; private Runnable target; private boolean isShutDown=fals 阅读全文
摘要:
2 同样 如果想要实现能够重入的读写锁,读可重入,写唯一,并且读写互斥,那么需要用两个资源分别给读写的线程竞争, 读的资源可累加,每次线程readlock的时候加一,不设上限;写的线程如上面只可唯一线程获得资源。并且无论读写线程竞争资源之前, 都要检测对方资源是否已经被占用,如果占用也要挂起,这样可 阅读全文
摘要:
1锁基础和优化。 (1)对象头mark *对象头的标记,描述对象的hash,锁信息,垃圾回收标记,年龄等。包括指向锁记录的指针,指向monitor的指针,gc标记,偏向锁线程id。这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,简称“Mark Word” *对象头信息是与对象 阅读全文
摘要:
1 基本概念 同步(synchronous)异步(asynchronous) 并发(concurrency)并行(paralleism) 区别:并发是一个cup分时执行不同部分,并行是多个cpu线程同时执行。 临界区 :公共资源(共享数据)。当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存 阅读全文
摘要:
1 类装载流程 : 加载,链接,初始化。 (1)加载 装载类的第一阶段,获取类的二进制流,转化为方法区数据结构,并在java堆中生成对应的java.lang.Class对象。 (2)链接 第一步 各种验证 文件格式验证:保证class格式正确。包括是否以0xCAFEBABE开头,版本号是否合理。 元 阅读全文
摘要:
1 gc算法 gc的对象是堆空间和永久区的不可触及的对象。 *对象有三个状态 可触及:从根节点可以触及到这个对象;可复活:引用被释放,但是finalize方法中可复活;不可触及:引用释放,finalize不复活。注意,finalize只会在第一次垃圾回收的时候调用一次,以后不会再掉用,而且调用时间不 阅读全文