2019年8月2日

String类的intern()方法,随常量池发生的变化

摘要: JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了。 intern的作用 简单的讲,intern方法是把调用者丢到常量池里,并返回一个引用指向它。 String s = new 阅读全文

posted @ 2019-08-02 15:32 千山万水楼外楼 阅读(330) 评论(0) 推荐(0)

2019年7月31日

JDK8的JVM内存结构,元空间替代永久代成为方法区及常量池的变化

摘要: JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了。 现在很多文章关于JVM内存结构的说法模糊不清,这里记录一下以前的一些比较模糊的JVM相关概念的重新认识。都是经过多处考证对 阅读全文

posted @ 2019-07-31 16:13 千山万水楼外楼 阅读(10904) 评论(2) 推荐(6)

2019年7月29日

wait()、notify()方法原理,以及使用注意事项--丢失唤醒、虚假唤醒

摘要: wait、notify原理 在前面以经说到对象锁的本质,重量级锁模式时对象头是一个指向互斥量的指针,实际上互斥量就是一个监视器锁(ObjectMonitor)的数据结构,此时对象的hashCode、分代年龄等信息都会保存到对应的ObjectMonitor中,ObjectMonitor还有一些属性如r 阅读全文

posted @ 2019-07-29 18:20 千山万水楼外楼 阅读(4664) 评论(1) 推荐(1)

消费者、生产者Java代码示例,wait-notify实现

摘要: 箱子中的苹果代表资源,现在有消费者从箱子中拿走苹果,生产者往箱子中放苹果。代码如下: 资源--箱子中的苹果: public class Box { int size; int num; public Box(int size, int num) { this.size = size; this.nu 阅读全文

posted @ 2019-07-29 17:07 千山万水楼外楼 阅读(483) 评论(0) 推荐(0)

2019年7月26日

volatile、Synchronized实现变量可见性的原理,volatile使用注意事项

摘要: 变量不可见的两个原因 Java每个线程工作都有一个工作空间,需要的变量都是从主存中加载进来的。Java内存模型如下(JMM): 线程访问一个共享的变量时,都需要先从主存中加载一个副本到自己的工作内存中,经过自己修改后再更新到主存中去。在这个过程中可能出现这种情况:线程A在工作内存中修改了变量1的值, 阅读全文

posted @ 2019-07-26 15:46 千山万水楼外楼 阅读(1873) 评论(1) 推荐(0)

2019年7月24日

CAS及其ABA问题

摘要: CAS、volatile是JUC包实现同步的基础。Synchronized下的偏向锁、轻量级锁的获取、释放,lock机制下锁的获取、释放,获取失败后线程的入队等操作都是CAS操作锁标志位、state、队列完成的。 CAS过程 CAS的全称是Compare And Swap 即比较交换 ,是系统原语, 阅读全文

posted @ 2019-07-24 16:33 千山万水楼外楼 阅读(475) 评论(0) 推荐(0)

2019年7月22日

JUC包Lock机制的支持--AQS

摘要: 在上一次总结中,提到了JUC包下使用Lock接口实现同步的方法,以及和Synchronized关键字的一些比较,那么使用Lock完成锁机制的底层支持又是什么呢?总结如下: 1 AQS是什么 AQS是一个抽象类,全名AbstractQueuedSynchronizer,意为抽象的队列式同步器。他在整个 阅读全文

posted @ 2019-07-22 15:57 千山万水楼外楼 阅读(265) 评论(0) 推荐(0)

2019年7月20日

JUC包实现的同步机制,原理以及简单用法总结

摘要: 除了用Synchronized关键字修饰同步块,让线程获取某对象的锁实现多线程操作共享变量的同步外,还可以使用java.util.concurrent包。并且,juc包机制下的同步更灵活。juc包的所有锁都实现自Lock接口和ReadWriteLock接口,下面分别总结。 (图片来源于网络) Loc 阅读全文

posted @ 2019-07-20 16:26 千山万水楼外楼 阅读(1221) 评论(0) 推荐(0)

2019年7月19日

Synchronized机制下偏向锁、轻量级锁、重量级锁的适用场景

摘要: 上次总结了Synchronized机制下的锁的种类和原理,这次总结一下几种锁的适用场景。 偏向锁 一个线程获取某个对象的偏向锁的成本是很低的,只需把对象头的偏向线程id改为自己就好,如果偏向线程id已经为自己则直接获得锁。当偏向锁的获取出现竞争,则偏向锁可能会升级为轻量级锁。 根据这些,可以看出偏向 阅读全文

posted @ 2019-07-19 14:47 千山万水楼外楼 阅读(1702) 评论(0) 推荐(0)

2019年7月17日

同步机制之一--Synchronized,以及此机制下的锁的本质和种类

摘要: Java中,为了实现同步的操作临界区,线程在执行临界区的代码时,需要获得某个对象的锁。本文介绍获得对象的锁的方法之一 Synchronized关键字。 Synchronized关键字的用法 Class Test { .... Object o = new Object(); public synch 阅读全文

posted @ 2019-07-17 16:47 千山万水楼外楼 阅读(644) 评论(0) 推荐(0)

导航