三次握手和四次挥手

“三次握手”和“四次挥手”是 TCP 进行传输连接所涉及到的关键步骤,即建立 TCP 连接和释放 TCP 连接。当然,在这两者之间还有“数据传输”这一环节。本文主要讨论的是 TCP 建立连接以及释放连接的过程,并讨论为什么要这么设计等相关问题。

设计模式汇总

之前或多或少接触过几种设计模式,只不过没有好好的总结。本文用于记录自己在设计模式方面的学习过程,在学习期间阅读了有关设计模式的书籍,挑选了博客园中优秀的文章,搜集网上的资料并进行了筛选,也看过别人对设计模式的总结。只是单纯看的话,会容易忘记。因此,我一般喜欢“输出式学习”,将学过的知识与自己对知识的理解整理下来,构建一套属于自己的知识体系。即便以后忘记了,也会通过浏览对原有知识的总结,很快重新拾起这部分的知识。

Java 中的 AQS

之前的《Java 中的 Lock 及各种锁的概念》简单介绍了 Lock 的使用以及 Lock 的唯一实现类 ReentrantLock 中的方法。我们一般会拿 synchronized 和 ReentrantLock 做比较。而在了解 ReentrantLock 之前需要理解 AQS 的实现。因此,本文分析了 AQS 中主要的源码,包括独占模式与共享模式,为更好的认识 ReentrantLock 打下基础。

Java 中的 Atomic 包

为了在多线程并发的情况下能够保证多个线程对数据进行合理的访问,避免出现并发情况下的线程安全问题,Java 从 JDK1.5 开始提供了 java.util.concurrent.atomic 包,它可以通过原子操作类来对某个变量实现更加简单、线程安全的更新操作。

Java 中的 CopyOnWrite 容器

在某些读多写少的多线程环境下,基于 CopyOnWrite 思想的 CopyOnWriteArrayList 容器和 CopyOnWriteArraySet 容器可以保证线程安全,能够确保读操作和写操作之间不会被阻塞。本文将会从 线程不安全的 ArrayList 入手,由 CopyOnWrite 思想引申到 CopyOnWriteArrayList,通过示例说明它是怎么保证线程安全的,适用的场景,最后对其进行总结。

Java 中的并发工具类

在 JDK 1.5 中的 java.util.concurrent 包下,有一些在并发情况下控制线程的工具类,有的可以控制并发流程,而有的可以交换线程之间的数据。通过这些辅助类可以更好的帮助我们进行并发编程,而本文主要介绍 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 这四个并发工具类。

Java 中的阻塞队列

在之前的《Java 中的线程池》一文中,在介绍线程池参数的时候,其中BlockingQueue<Runnable> workQueue用于存储等待执行的任务,提到了几种不同类型的等待队列。本文将详细的介绍阻塞队列的实现原理以及各自的使用方法。

Java 中的线程池

在多线程并发的环境下创建多个线程去执行任务,每当有一个任务到来的时候都需要创建一个线程去执行。这种方式虽然是可行的,但如果线程并发的数量很多,并且每个线程都是执行一个时间很短的任务就结束掉了,这样频繁的创建线程就会大大降低系统的运行效率,因为频繁的创建和销毁线程需要消耗额外的时间。对于这种情况,我们可以使用线程池技术让线程达到复用的目的。

Java 中的 ThreadLocal

使用 Java 中的 ThreadLocal 类可以创建只能由同一个线程读写的变量。也就是说,即使两个线程在执行相同的代码,并且代码中都有对同一个 ThreadLocal 变量的引用,那么这两个线程也不会看到对方的 ThreadLocal 变量。因此,Java 中的 ThreadLocal 类提供了一种简单的方式来使代码中的线程变得更加安全。