Java中线程安全问题个人理解

发表于:2012-2-23 09:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:flystar007    来源:51Testing软件测试网采编

分享:

  1、对代码块加锁

  对共同持有的对象加锁可以把内部类写成这样的

  1. public class Outerput{  
  2.   public void print(String name){  
  3.    synchronized (this) {  
  4.     for(int i = 0;i < name.length(); i++){  
  5.      System.out.print(name.charAt(i));  
  6.     }  
  7.     System.out.println();  
  8.    }  
  9.   }  
  10.  }

  2、对非静态方法加锁,加锁的对象是this

  1. public class Outerput{  
  2.   public synchronized void print(String name){  
  3.    for(int i = 0;i < name.length(); i++){  
  4.     System.out.print(name.charAt(i));  
  5.    }  
  6.    System.out.println();  
  7.   }  
  8.  }

  3、对静态方法加锁的对象到底是谁?

  1. public static synchronized  void print2(String name){  
  2.    for(int i = 0;i < name.length(); i++){  
  3.     System.out.print(name.charAt(i));  
  4.    }  
  5.    System.out.println();  
  6.   }

  其实加锁的对象是字节码对象,Outerput.class

  如果和非静态方法同时持有同一个对象时,可以持有同一个字节码对象。

22/2<12
2023测试行业从业人员调查问卷已开启,千元大奖正在等你~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号