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 类提供了一种简单的方式来使代码中的线程变得更加安全。

线程间的通信机制

之前的文章,比如在多线程环境中使用 synchronizedLock 可以通过锁的方式实现线程之间的同步互斥访问临界资源。也就是说,只有当一个线程释放了锁之后,另一个线程才能获得锁,从而对数据进行操作。但在有些情况下,需要多个线程之间进行协作,以使得多个线程可以一起去解决某个问题,此时就需要采用线程通信-协作机制。

Java 中的 Lock 及各种锁的概念

上节 《Java 中的 synchronized》介绍了能够在多线程访问临界资源的情况下,使用 synchronized 关键字可以保证线程之间的顺序执行(序列化访问临界资源),即同一时刻只能由一个线程获得当前对象的锁。可以看到 synchronized 是在 JVM 层面实现了对临界资源的同步互斥访问,但锁的粒度较大。本文将介绍并发包下的 Lock 接口,同样也可以实现锁的功能。

Java 中的 synchronized

在多线程并发的情况下,多线程同时访问的资源叫做临界资源(如变量、对象、文件等),当多个线程同时访问对象并要求操作相同资源时,其操作可能存在数据不一致或数据不完整的情况。为了避免这种情况的发生,需要采取同步互斥机制,以确保在某一时刻,方法内只允许一个线程对该资源进行操作,而其它线程只能等待。

项目部署小结

之前做的项目都是跑在本地的虚拟机上的,想到在腾讯云上还有一台云服务器,于是便打算将其部署到云服务器上,本文会涉及到一些部署上的流程以及一些坑

Java 容器之 ConcurrentHashMap

ConcurrentHashMap 是 HashMap 的一个线程安全并且支持高并发的版本,之前的文章《Java 容器之 HashMap》从 HashMap 的实现原理到各个方法的使用,以及每个方法各自的具体实现都分别进行了介绍,并将 JDK1.7 与 JDK1.8 中的 HashMap 进行了对比。

Java 中的序列化和反序列化

当在 Java 中创建对象的时候,只要我们需要这个对象,它就会一直存在。但是一旦程序终止,它们也就不复存在了。如果我们想让对象能够在程序不运行的状态下仍然能够保存它们的信息,那就需要用到序列化机制