java线程安全

来源:互联网 发布:mac下载文件夹不见了 编辑:程序博客网 时间:2024/04/27 12:57

    引用网上一个实例做描述:

 

  如果一个资源或对象可能被多个线程同时访问,它就是一个共享资源;例如类的成员变量,包括

类变量和实例变量,再比如对一个文件进行写操作等。一般情况下,对共享资源的访问需要考虑线程

安全的问题。

public class C1 {
public static java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-

dd");
//其他代码
}
  假如在一个JSP中这样的去调用:
<%
Java.util.Date date = C1.sdf.parse(“2003-4-15”);
%>
  则这样的代码不是线程安全的。因为java.text.SimpleDateFormat不是线程安全的,jsp中的

代码将会有若干个线程同时执行,而都访问的是同一个线程不安全的对象,这样就不是一个线程安全

的代码。

改成这样就可以了:
<%
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
Java.util.Date date = sdf.parse(“2003-4-15”);
%>

  此时,sdf对象从创建到销毁都位于一个方法中,相当于一个局部变量,不是一个共享资源,因

此则没有线程不安全的问题。

 

     如何定义线程安全,有这样一种解释:在线程中使用共享资源时,能够保证共享资源在任何时候都是原子的、一致的,这样的线程就是线程安全的线程。所谓原子性,是指一个共享资源的所有属性在任何时刻都是一起变化、密不可分的;所

谓一致性,是指一个共享资源的所有属性在变化之后一定会达到一个一致的状态。

 

     相关:

线程的四关键字五等级 http://dev.csdn.net/article/49/49689.shtm

集合线程安全 http://kang.javaeye.com/blog/364457

                   http://zwchen.javaeye.com/blog/91088