摘要: 一.对象的内存布局 1.对象头 存储对象自身的运行时数据,如哈希码,GC分代年龄,锁状态标志,偏向线程ID,官方称为Mark Word。 类型指针,虚拟机通过这个指针来确定这个对象是哪一个类的实例。 记录数组长度的数据,不是数组时没有。 存储对象自身的运行时数据,如哈希码,GC分代年龄,锁状态标志, 阅读全文
posted @ 2018-11-06 21:22 AJimmyFang 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 一.定义 cpu保存上一次的任务状态,加载下一个任务这个过程为一次上下文切换。 二.线程上下文切换的原因 1.正常时间片完了之后的正常调度。 2.执行任务时遇到IO阻塞,挂起当前线程加载下一个线程。 3.多个任务抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续下一任务。 4.用户代码挂起当前任 阅读全文
posted @ 2018-11-06 18:43 AJimmyFang 阅读(707) 评论(0) 推荐(0) 编辑
摘要: 一.简介 1.定义以及作用: 用于创建锁和其他同步类的阻塞原语,也就是Lock 的爸爸? 2.许可(permit): LockSupport通过许可(permit)实现挂起线程、唤醒挂起线程功能,有了permit就不会挂起(免死金牌)。 3.pack与uppack pack(阻塞线程):挂起线程,当 阅读全文
posted @ 2018-11-06 18:10 AJimmyFang 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 一.控制并发访问资源的利器-信号量Semaphore 1.定义及作用 它是一种计数器,用来保护一个或多个共享资源的访问,计数器大于0表示可以使用资源,如果为0,线程会休眠到计数器大于0,线程完成资源使用后,信号量要被释放,释放会使计数器加一。 2.使用方法 1.首先调用acquire()方法获得信号 阅读全文
posted @ 2018-11-06 16:11 AJimmyFang 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 一.什么是死锁? 死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行。 二.产生死锁的四个必要条件 1.互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。 2.请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。 3. 阅读全文
posted @ 2018-11-06 12:15 AJimmyFang 阅读(31583) 评论(0) 推荐(4) 编辑