java 线程安全
线程安全
只有在单例并发的情况下才会出现线程安全问题,引起问题的主要原因就在于对象的资源共享(如实例变量等),不过局部变量是线程安全的。因此在程序设计的时候尽量不要用实例变量。产生这样原因在于java的内存分配机制,实例变量是存放在堆内存中的所有线程共享,而每个线程也都有自己的线程盏,局部变量存放在线程盏中,各线程独享。
简要的说在并发的时候,servlet与struts1都是单例多线的模式,一旦声明的有实例变量,就会引起线程安全问题。struts2是多例单线模式(需要配置)无所谓线程安全。spring中server层对象一般都是无状态的,因此运用单例亦不会出现线程安全问题,如果对象存在状态就需要考虑并发下的线程安全问题。
下面简单的介绍下ThreadLocal:
ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread
,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。
线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一
个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。
从线程的角度看,就好像每一个线程都完全拥有该变量。
个人简要理解为线程的单例。和并发多线程并没有直接的关系,关注的领域也是不同的!不要将ThreadLocal和多线并发混淆。
转自:
http://utopiasky.javaeye.com/blog/576860
相关文档:
public class JavaPlus {
public static void main(String[] args) {
int x = 5;
x++;// x = x + 1;//后加加
System.out.println(x);
x--;// x = x - 1;//后减减
System.out.println(x);
++x;// x = x + 1;//前加加
Sys ......
对枚举类型印象大多来自于C
语言,在
C
语言中,枚举类型是一个
HardCode
(硬编码)类型,其使用价值并不大。因此,在
Java 5
之前,枚举是被抛弃的。然而
Java 5
以后的发现版本开始对枚举进行支持,枚举的引入给
Java
世界带来了争议。
笔者比较赞同引入枚举,作为一门通用的静态编程语言,应该是 ......
Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信 ......
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。
cmd /c xx是执行完xx命令后关闭命令窗口。
cmd /k xx是执行完xx命令后不关闭命令窗口。
cmd /c start xx会打开一个新窗口后执行xx指令,原窗口会关闭。
cmd /k start xx会打开一个新窗口后执行xx指令,原窗口不会关闭。
可以用cmd /?查看帮助信息。 ......