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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韦振华 中级黑马   /  2012-12-24 21:00  /  1838 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

评分

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

查看全部评分

3 个回复

倒序浏览
1、synchronized关键字的作用域有二种:

1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;

2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。

2、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象;

3、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;

回复 使用道具 举报
首先abstract与static,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。
synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。
native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个把方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?
回复 使用道具 举报
1、abstract不能和static、final同时修饰。abstract自己不能实现,就靠子类实现,static是类属性,一定要实现的
2、synchronized的问题。首先你要清楚synchronized作为同步,肯定是要具体实现的,而抽象方法有吗?所以不能放一起。
3、native问题。abstract method存在的意义就是让子类具体实现method,而native则是将实现移交给local system本地系统,如果两个同时出现的话,电脑怎么知道你到底是要给哪个实现呢,明显是很冲突的东西,果断不能放一起,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马