博客!博客!

  终于决定写个人博客了!!!



    大一的时候在CSDN上写过一段时间的ACM题目解析,时间不长,一个学期。

    去年开始尝试写个人笔记,我记得最先使用的是印象笔记,当时确实是把它当成了一个在线笔记使用,记录的多是学习过程的重要点或者知识点,写过段时间也就没在写,单纯的记录知识点跟看书没什么区别。

    这之后准备正式的写一些个人博客,开始的时候,自己做一个网站,计划做成一个动态的网站,问题来了:前后端不兼容(拙劣的审美让我放弃了前台自己做的想法)、数据库不稳定、写文章的功能不完善(我尝试过一些流行的Editor)。发生了好多问题之后,我开始在简书上写一些个人的感想或是杂谈,是的,我放弃了这个让人热血澎湃的想法。

    然后这个学期开学,做一个个人博客的想法又开始萌发,考虑了一下,把博客挂到github上,然后做了这么一个简易的博客。

    我会在后面一些的日子里,把我以前写过的一些文章整理发布到这个博客上来。

Mehr lesen

HashMap在并发环境下出现的错误

Mehr lesen

Java中不可变的一般类型

​ 这几天有在读一些关于并发的书,然后在一本书上看到了这么一个描述:在Java中,Integer属于不变对象,也就是对象一旦被创建,就不可能被修改。这段描述是讲Integer的对象,当初始化之后这个对象的内容就不能够改变了,对Integer的操作,都会新建一个对象。
换句话讲,Integer对象与Streing表现出来的性质是一样的。然后了解了一下,发现在Java中,不仅仅是Integer类,Double、Float等类都是不可变的。然后我测试了一下基本类型的不变性。

Mehr lesen

Java中的Concurrent类的实现

​ 在Jdk的实现中,对于HashMap的实现是线程非安全的,在大量并发读的情况下,HashMap能够保持线程安全,但是在存在大量写的情况下,HashMap将会出现并发错误,所以JDK实现了ConcurrentHashMap来保证线程安全并且高效的HashMap。
JDK还实现了ConcurrentLinkedQueue来实现在并发中的非阻塞的队列和BlockingQueue的阻塞线程的队列。

Mehr lesen

可重入锁ReentrantLock和读写锁ReentrantReadWriteLock

​ Java中加入了可重入锁的具体实现:ReentrantLock,还有读写锁的实现:ReentrantReadWriteLock。

Mehr lesen

AQS

​ 在Java中,对于锁的默认实现是synchronized实现的加锁和解锁,而在JDK1.5之后Java中实现了ReentrantLock,ReentrantLock是当内置加锁机制不适用的时候,作为一种可以选择的高级功能。
构建ReentrantLock的时候,采用了AQS(AbstractQueuedSynchronized),也就是队列同步器作为基础框架。

Mehr lesen

TCP连接的建立与关闭

​ 今天在某个技术群里水群的时候,忽然看到一个有意思的比较有意思的问题:HTTP请求中的TCP连接是由谁来关闭的,服务端还是客户端?然后追问了一下,实际表达的意思是在一个TCP连接中,发出第一个关闭请求的是服务端还是客户端?有什么场景会出现服务端先关闭的情况。
然后今天有空的时候抓了一下包,来专门测试了一下这种情况。

Mehr lesen

偏向锁、轻量级锁、重量级锁

​ 在讲述Java的偏向锁之前,先对我在《Java中的锁》一文中提到的自旋锁做一下补充,并且总结一下锁在Java对象中的存储。

Mehr lesen

Java中的锁

​ 在《同步语义-synchronized+final》一文中,我提到了Java中的锁–synchronized。synchronized在Java中是内置锁的实现,通过将方法、变量或者对象设为synchronized来实现自动的加锁和解锁步骤。
但是在Java中,还有多种或显式或隐式的锁来实现并发编程,在这里详细的整理一下。

Mehr lesen

Java中的并发

​ 已经写过一些有关于并发的文章,然后统一整理一下:

Java并发模型原理:

共享内存模型
内存屏障
volatile
synchronized和final
双重检查锁和延迟初始化
线程间通信
Java内存模型

Mehr lesen