Java 并发基础(二)

线程安全问题

线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数据或者其他不可预见的结果的问题。线程 A 和线程 B 可以同时操作主内存中的共享变量,那么线程安全问 题和共享资源之间是什么关系呢?是不是说多个线程共享了资源,当它们都去访问这个共 享资源时就会产生线程安全问题呢?答案是否定的,如果多个线程都只是读取共享资源,而不去修改,那么就不会存在线程安全问题,只有当至少一个线程修改共享资源时才会存 在线程安全问题。最典型的就是计数器类的实现,计数变量 count 本身是一个共享变量,多个线程可以对其进行递增操作,如果不使用同步措施,由于递增操作是获取—计算—保存三步操作,因此可能导致计数不准确,如下所示。

Java 并发基础(一)

什么是线程?

要讲清楚线程,必须先从进程说起。线程并非独立存在,而是进程内部的一个实体。简单来说,进程是系统进行资源分配(内存、文件句柄、信号处理等)和调度的基本单位。它为程序提供了一个独立的“容器”或“空间”。而线程则是进程中的一条执行路径。一个进程至少包含一个线程(主线程),多个线程共同共享进程所拥有的资源。这就像餐厅和厨师的关系,进程就相当于一家餐厅,而线程就是这家餐厅干活的厨师,一个店里可以只有一个厨师(单线程),也可以雇好几个厨师共享厨房(多线程)。

Java 工具类之线程相关

ThreadUtil

下面是一个非常扎实的具备生产能力的线程工具类。在高并发场景下,直接使用 Executors 快捷创建线程池是极其危险的(容易导致 OOM),这个类使用分类治理、资源隔离、优雅关闭的核心架构思想来规范线程的使用。