A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩军博 黑马帝   /  2011-12-12 22:59  /  1877 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩军博 于 2011-12-13 11:21 编辑

synchronized 这个关键字锁住变量和锁住方法   都说是前者好,但是这是为什么?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

正序浏览
看需求了,能不读锁尽量不读锁,毕老师单例懒汉式里锁放在方法上每次都要先读锁然后再判断,定义在里面后只读一次锁,实例创建后就不用读锁了,少了一步,这样提高了代码的运行效率。
回复 使用道具 举报

synchronized 这个关键字锁住变量和锁住方法   都说是前者好,但是这是为什么?

这是毕老师懒汉式单例类讲解里边的    你是的意思是说为什么锁住方法里边的代码块比直接锁住方法好吧

直接锁住方法相对于前者比较低效一些.  想要执行方法里边的内容每次都要判断这个锁.
而锁住里边的代码块读锁的次数减少,也就是说效率提高!
所以说前者更好!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
t_mac 黑马帝 2011-12-12 23:18:58
沙发
本帖最后由 t_mac 于 2011-12-12 23:20 编辑

synchronized能锁住变量?
好像只能锁住方法或者是方法中的代码块吧,应该是说锁住代码块比锁住一个大的方法要好
因为,将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为 synchronized ,并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是 synchronized 块。
synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:
synchronized(syncObject) {
//允许访问控制的代码
}
  synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (可以是类实例或类)的锁方能执行,由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马