您的位置:首页 > 编程语言 > Java开发

JAVA的关键字:final && synchronized

2010-04-08 14:58 603 查看
      根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法。

(1)final类不能被继承,没有子类,final类中的方法默认是final的。

(2)final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

(3)final不能用于修饰构造方法。

注意:父类的private成员方法是不能被子类继承的,更不存在被覆盖,因此private类型的方法默认是final类型的。

 ===========================================================================================================

(1)synchronized关键字的作用域有二种:

        A,某个对象实例内。synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法,相当于每一次运行到这个方法,都要检查有没有其它正在用这个方法的程序,有的话要等其它运行完这个方法后再运行此线程;没有的话,直接运行(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。但是,不同的对象实例的synchronized方法是不相干扰的,也就是说其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法。

        B,某个类的范围。synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。综合以上两点可以得出结论,synchronized修饰在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。

(2)除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是:private final Object mLock = new Object(); ........... synchronized(syncObject){/*区块*/},它的作用域是当前对象,syncObject可以是类实例或类(如果代码段所在函数是static的,则syncObject本身也要有static修饰,否则提示:non-static variable
syncObject cannot be referenced from a static context)。

(3)关于死锁。多个代码段加锁的目的就是为了这几个代码段之间互斥执行,如果一个synchronized(syncObject)代码段中的函数调用了另一个函数B,而函数B中也有synchronized(syncObject)代码段,这就造成了死锁。因为两者约束了同一个syncObject。

参考原文:http://c.360webcache.com/c?m=79cc646527b44025e5b6582c5e97431c&q=synchronized&u=http%3A%2F%2Fzhidao.baidu.com%2Fquestion%2F212393605.html#360sou

参考原文:http://www.blogjava.net/hongzionline/archive/2007/09/19/146392.html

参考原文:http://zhidao.baidu.com/question/68492173.html

参考原文:http://zhidao.baidu.com/question/106703762.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java