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