线程内部共享变量(ThreadLocal类使用初步)
来源:互联网 发布:7.1声道测试软件 编辑:程序博客网 时间:2024/06/13 02:04
线程内部共享变量的应用背景介绍:
以转账为例,对于同一个转账系统,当有多个线程访问的时候,我们需要为这些线程提供数据库连接(connection),显然此时的connection是线程内共享的。因为,一个单独的线程对应一个用户,当对某个用户的服务完成之后,数据库连接关闭,如果数据库连接线程共享,毫无疑问,此时会对正在转账的其他用户产生影响。
一个线程可以对应多个ThreadLocal对象;
关于ThreadLocal类我会在源码解析系列中做更详细的分析。
下面这个程序是在学习了张孝祥老师的多线程之后自己又敲的一个:
import java.util.Random;public class ShareDataInThread{ public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub int age = new Random().nextInt(); useSaveData data = useSaveData.getThreadLocalInstance(); System.out.println(Thread.currentThread().getName() + " has put data :" + age); data.setAge(age); data.setName(""+age); new A().get(); new B().get(); } }).start(); } } static class A { public void get() { useSaveData data = useSaveData.getThreadLocalInstance(); String name = data.getName(); int age = data.getAge(); System.out.println("A from " + Thread.currentThread().getName() + " age:" + age); } } static class B { public void get() { useSaveData data = useSaveData.getThreadLocalInstance(); String name = data.getName(); int age = data.getAge(); System.out.println("B from " + Thread.currentThread().getName()+ " age:" + age); } }}class useSaveData{ private static ThreadLocal<useSaveData> map = new ThreadLocal<>(); public static useSaveData getThreadLocalInstance() { useSaveData instance = map.get(); if (instance == null) { instance = new useSaveData(); map.set(instance); } return instance; } private useSaveData() { } private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
在敲程序的过程中得到的收获:
- 第一是单例模式,以后我会专门开个设计模式的专栏来学习一下设计模式。
- 而是写程序的时候最好要分层写,主要业务逻辑和次要业务逻辑分清楚,这样写出来的代码也会更好更清晰。
0 0
- 线程内部共享变量(ThreadLocal类使用初步)
- 线程范围内共享变量使用ThreadLocal类详细方法
- 线程范围内共享变量(ThreadLocal)
- ThreadLocal--线程独自共享变量
- android 线程范围内共享变量以及ThreadLocal的使用
- (三) Java多线程详解之线程范围内共享变量及ThreadLocal类使用
- 使用JDK提供的ThreadLocal实现线程范围的共享变量(类似于Map<Thread,Variable>)
- ThreadLocal类 线程间共享变量的应用
- 张孝祥ThreadLocal实现线程范围内共享变量(学习笔记)
- (5)ThreadLocal类及应用技巧---- 线程范围内共享变量
- (5)ThreadLocal类及应用技巧---- 线程范围内共享变量
- ThreadLocal 线程范围内的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围内共享变量
- 安卓转战React-Native之签名打包成Apk并极速多渠道打包
- IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- 手机直播延时直降90% HLS+横空出世
- 块级元素、行内元素、空元素
- HTML5应用之文件拖拽上传
- 线程内部共享变量(ThreadLocal类使用初步)
- 纳尼,世界上第一台无人机竟产自中国?
- CodeForces 621B Wet Shark and Bishops
- Html-音视频基础实例
- 迁移学习
- 【jQuery】纯js的右下角弹窗
- LVS详解
- MySQL学习之——关于or的索引问题
- 一个你绝对不知道的AAC编码神级功能-深度干货分享