网站建设自,雷电模拟器手机版下载官方网站,凡科网站建设网页怎么建,企业服务平台是做什么的系列文章目录
设计模式之避免共享的设计模式Immutability#xff08;不变性#xff09;模式 设计模式之并发特定场景下的设计模式 Two-phase Termination#xff08;两阶段终止#xff09;模式 设计模式之避免共享的设计模式Copy-on-Write模式 提示#xff1a;写完文章后…系列文章目录
设计模式之避免共享的设计模式Immutability不变性模式 设计模式之并发特定场景下的设计模式 Two-phase Termination两阶段终止模式 设计模式之避免共享的设计模式Copy-on-Write模式 提示写完文章后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 系列文章目录一、Thread-Specific Storage是什么二、避免共享两种方案三、应用场景举个栗子 一、Thread-Specific Storage是什么
Thread-Specific Storage中文翻译为线程本地存储简称TSS模式是一种即使只有一个入口也会在内部为每个线程分配特有的存储空间的模式。在 Java 标准类库中ThreadLocal 类实现了该模式。线程本地存储模式本质上是一种避免共享的方案由于没有共享所以自然也就没有并发问题。如果你需要在并发场景中使用一个线程不安全的工具类最简单的方案就是避免共享。
二、避免共享两种方案
将这个工具类作为局部变量使用。缺点在高并发场景下会频繁创建对象线程本地存储模式为每个线程只需要创建一个工具类的实例所以不存在频繁创建对象的问题。 三、应用场景 线程局部变量TSS 可以用于保存线程局部变量这在并发编程中非常有用。例如在Web应用程序中需要为每个Http请求创建一个独立的线程而TSS 可以被用来存储和维护与每个请求相关的数据。 日志跟踪在多线程环境中进行日志跟踪时每个线程可以有自己的日志对象这样可以避免日志输出混乱和线程之间的干扰。 上下文信息TSS 可以用于保存线程特定的上下文信息比如用户身份验证状态、语言偏好、或者其他与线程相关的上下文信息。 连接池管理在数据库连接池等资源池管理中TSS 可以用于为每个线程保留其拥有的数据库连接确保数据库连接的独立性和线程安全性。 执行跟踪在分布式系统或者异步处理中TSS 可以用于存储执行上下文信息保持线程执行跟踪的一致性。
举个栗子
SimpleDateFormat 不是线程安全的那如果需要在并发场景下使用它有一个办法就是用 ThreadLocal 来解决。
public class ThreadLocalSimpleDateFormatExample {// 创建一个ThreadLocal对象来存储SimpleDateFormat实例private static ThreadLocalSimpleDateFormat threadLocalSdf ThreadLocal.withInitial(() - new SimpleDateFormat(yyyy-MM-dd HH:mm:ss));// 格式化日期public static String formatCurrentDate() {SimpleDateFormat sdf threadLocalSdf.get();return sdf.format(new Date());}// 线程执行的任务public static class MyRunnable implements Runnable {Overridepublic void run() {System.out.println(Formatted date: formatCurrentDate());}}public static void main(String[] args) throws InterruptedException {// 创建多个线程并执行任务Thread t1 new Thread(new MyRunnable());Thread t2 new Thread(new MyRunnable());t1.start();Thread.sleep(10000);t2.start();}
}