ThreadLocal 中关于非线程安全

问题描述

模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被多个线程共享。虽然模板类通过资源池获取数据连接或会话,但资源池本身解决的是数据连接或会话的缓存问题,并非数据连接或会话的线程安全问题。红色那段琢磨不出来真谛 ? 请高手详细指点

解决方案

HashMap本身不是线程安全的,为了在SimpleThreadLocal中使用,所以通过Collections.synchronizedMap(new HashMap());得到一个线程安全的Map。这样多个线程的情况下,各个线程会串行地访问valueMap。比如调用get,set,remove等方法时,能够保证valueMap中数据的完整性。
解决方案二:
private Map valueMap = Collections.synchronizedMap(new HashMap());//这样写的目的???? Threadlocal是每次一个线程访问,他就复制一份副本,上面那句话的作用就是让每次产生的副本不一样,这样就使得ThreadLocal线程安全了

时间: 2024-10-21 21:57:00

ThreadLocal 中关于非线程安全的相关文章

Java中的线程同步与ThreadLocal无锁化线程封闭实现_java

Synchronized关键字 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(

Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)

前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我们将对其进行一小步一小步的优化,来避免一些明显容易引发的错误.   感知一下最原始的消息弹出框如下图:     一:传统消息框,容易引发命案   1:原始的消息框,是线程阻塞类型的,很容易引发超时问题 线程阻塞?怎么理解? 简单的说就是,WCF服务端给客户端发送了消息提示之后,一直进入等待状态,直到

redis.conf 配置文件 中 daemonize 守护线程

问题描述 redis.conf 配置文件 中 daemonize 守护线程 在学习redis的过程中,看到介绍redis的配置文件redis.conf中 daemonize 可以用来指定redis 是否要用守护线程的方式启动. 请问redis 的守护线程启动和非守护线程启动 有什么启动 ps:目前在测试的时候是使用screen 启动,启动成功后退出screen, 暂时不明白redis 中关于守护线程的问题. 解决方案 就是普通命令方式启动daemonize,它也会是守护进程,也就是达到scree

Windows下的PHP安装文件线程安全和非线程安全的区别_php技巧

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用 多进程的工作方式不同的是Windows系统是采用多线程的工作方式.如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程 的基础之上的,而非多线程.一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了.但存在一个问题,很多常用的 PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在IS

Java的Swing编程中使用SwingWorker线程模式及顶层容器_java

使用SwingWorker线程模式 谨慎地使用并发机制对Swing开发人员来说非常重要.一个好的Swing程序使用并发机制来创建不会失去响应的用户接口-不管是什么样的用户交互,程序总能够对其给出响应.创建一个有响应的程序,开发人员必须学会如何在Swing框架中使用多线程. 一个Swing开发人员将会与下面几类线程打交道: (1)Initial threads(初始线程),此类线程将执行初始化应用代码. (2)The event dispatch thread(事件派发线程),所有的事件处理代码在

PHP 线程安全与非线程安全版本的区别深入解析_php技巧

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式.如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程. 一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了.但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAP

java-Java抽象类中的非抽象方法的方法体为空,子类也没有头给予实现,但却被调用了是什么意思

问题描述 Java抽象类中的非抽象方法的方法体为空,子类也没有头给予实现,但却被调用了是什么意思 读源码的时候关键地方卡住了,在一个方法的结尾把数据作为参数调用了一个抽象类的方法,这个方法不是抽象方法,方法体也是空的,这个抽象类的子类只有一个,而且也没有实现这个方法,那这些数据到底了什么地方呢? 解决方案 实现方法在子类中,多态的概念,父类有这个方法(不是abstract的),所以要写一个空方法,具体实现由子类处理 解决方案二: 子类继承了父类, 不管是否重写父类的方法,都可以调用父类的方法吧

在VB中兼容非ACCESS数据库的技巧

本文从VB数据库体系结构的角度出发,结合一个具体实例,阐述了在VB中兼容非ACCESS格式数据库的具体方法和技巧. 关键词:VB.非ACCESS数据库.数据存取对象 一个完整的数据库管理系统(DBMS)应是能兼容市面上各种较流行数据格式的系统,它充分考虑了不同用户的实际要求.鉴于目前市面上有多种数据库格式(如Foxpro.DBase.Paradox等)流行,因而在VB数据库应用程序中兼容非ACCESS数据库就显得尤为重要了. 作为一种流行的开发平台,VB提供了强大的数据库功能.主要有以下三种:数

EXCEL中如何计算非0开始的数列中表格的格数,含空白表格

=counta()是统计有内容的单元格 =countblank()是统计空白单元格 你可以把俩个函数相加就是你要的个数括号你输入你的数据范围就可以. 所有的用一个公式就行,直接填充公式就可以. 你可以用这个公式=SUM(B3:K3)/(8-MATCH(1,B3:K3/B3:K3,0))那个8就是不管有没有数据总共有几个是供存放这类型数据的A到K8个单元格,你也可以用counta(B3:K3)+countblank(B3:K3)来代替. excel表格行 插入时跳出对话框"为了防止可能的数据丢失,