全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

java面试题:java知识点合集(五)

发布时间:2022-07-11 17:00:00
发布人:wjy

  一. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

  对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

  二. wait和sleep的区别有哪些?

  sleep()是Thread类中的方法,而wait()则是Object类中的方法。

  sleep()方法导致了程序暂停,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。

  wait()方法会导致线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

java面试题:java知识点合集(五)

  三. 在 Java 程序中怎么保证多线程的运行安全?

  出现线程安全问题的原因一般都是三个原因:

  线程切换带来的原子性问题 解决办法:使用多线程之间同步synchronized或使用锁(lock)。

  缓存导致的可见性问题 解决办法:synchronized、volatile、LOCK,可以解决可见性问题

  编译优化带来的有序性问题 解决办法:Happens-Before 规则可以解决有序性问题

  四. Volatile修饰符的有过什么实践?

  一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。

  volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

  五. Synchronized 和 Lock 有什么区别?

  首先synchronized是Java内置关键字,在JVM层面,Lock是个Java类;

  synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。

  synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 lock 需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁。

  通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。

  更多关于“Java培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的好程序员班,高品质课程助力你实现java程序员梦想。

相关文章

抖音小店注册地址不能填写吗为什么呢

2023-09-30

抖音小店怎么进入精选联盟入口呢

2023-09-30

抖音小店怎么更改主体信息

2023-09-30

开抖音小店无货源需要多久

2023-09-30

开抖音小店需要多少费用汽车配件

2023-09-30

抖音小店在哪回复评价

2023-09-30
在线咨询 免费试学 教程领取