`
面朝大海春暖花开
  • 浏览: 85242 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

线程安全

阅读更多
1) 如果对象是immutable,则是线程安全的,例如:String,可以放心使用。
2) 如果对象是线程安全的,则放心使用
3) 有条件线程安全,对于Vector和Hashtable一般情况下是线程安全的,但是对于某些特殊情况,需要通过额外的synchronized保证线程安全。
4) 使用synchronized关键字;
 对于上例中可以改写jsp代码,在sdf上进行同步,而不需要每次创建一个新的对象来保证线程安全,代码如下:

   1. <%
   2. synchronized(C1.sdf){
   3. Java.util.Date date = C1.sdf.parse(“2003-4-15”);
   4. }
   5. %>

  这种写法是在一个对象级别上进行同步,也就是说任何时候,对于这个对象,最多只能有一个线程在执行同步方法。

  另外一种写法是在Class级别上进行同步,写法如下:

   1. public class C1 {
   2. public static java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
   3.
   4. public void method(){
   5. synchronized(C1.class){
   6. //synchronized code
   7. }
   8. }
   9. }

  这种写法表示无论C1有多少个实例,在任何一个时间点,最多只能有一个线程和一个实例进入同步块中。这种同步会比较大的影响性能。

  5) 有些对象不能在多线程间共享,则只能在方法内部使用,或者只在一个线程内部使用。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics