java中的三个关键字 面试题:Java中Sychronized关键字有什么作用?

[更新]
·
·
分类:互联网
2638 阅读

java中的三个关键字

面试题:Java中Sychronized关键字有什么作用?

面试题:Java中Sychronized关键字有什么作用?

这是面试中,常常被问道的问题,如何回答这个问题呢?

首先,sychronized关键字有3中用法,分别是:
修饰普通方法,加锁的对象是this
修饰static方法,加锁的对象时类对象,即
修饰方法快,加锁对象就是修饰的变量
有些面试官比较鸡贼,有一些变形的问法,例如:在两个线程中,同时调用一个对象的Synchronized关键字修饰的static方法和普通方法,有资源竞争的问题吗?根据对三种用法的分析,因为加锁的是不同对象,所以不会有资源竞争问题。

synchronized是java中的一个关键字 我们称其为同步关键字 主要是用来处理java中的同步机制同一个资源被用户并发访问时,会出现并发问题,比如:有一个实例变量x,第一个用户访问它,并赋值为100,但还没有来得及打印出x,另一个哥们进来访问了x,并改为200,这时候第一个哥们兴高采烈的打印出x的值,但却发现不是100,是200.这哥们就郁闷了,怎么回事呢?这就是并发问题,但如果把上面的代码用同步代码块包含起来,任意一个时间只能有一个哥们访问实例变量x,一直到这哥们执行完同步代码块中的所有代码后,其他哥们才能再访问。

final定义?

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。
 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。