每日十题八股-2025年2月24日-补充材料

1.synchronized和Lock的区别是什么?

来自Java- 技术专题 -Synchronized 和 lock 区别
1.lock 是一个接口,而 synchronized 是 Java 的一个关键字,synchronized 是内置的语言实现。
2. 异常是否释放锁:synchronized 在发生异常时候会自动释放占有的锁,因此不会出现死锁;而 lock 发生异常时候,不会主动释放占有的锁,必须手动 unlock 来释放锁,可能引起死锁的发生。(所以最好将同步代码块用 try catch 包起来,finally 中写入 unlock,避免死锁的发生。)
3.是否响应中断:lock 等待锁过程中可以用 interrupt 来中断等待,而 synchronized 只能等待锁的释放,不能响应中断。
4. 是否知道获取锁:Lock 可以通过 trylock 来知道有没有获取锁,而 synchronized 不能。
5. Lock 可以提高多个线程进行读操作的效率。(可以通过 ReadWriteLock 实现读写分离)
6.在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时 Lock 的性能要远远优于 synchronized。所以说,在具体使用时要根据适当情况选择。
7.synchronized 使用 Object 对象本身的 wait 、notify、notifyAll 调度机制,而 Lock 可以使用 Condition 进行线程之间的调度。

2.JDK8新特性

Java 8是Java语言的一次重要更新,它引入了许多新特性,使得编写代码更加简洁、易于维护且功能更强大。以下是Java 8的主要新特性:

  1. Lambda表达式:
    Lambda表达式是Java 8最重要的特性之一,它提供了一种简洁的方式来表示匿名函数。
    语法:(parameters) -> expression 或者 (parameters) -> { statements; }。
    Lambda表达式通常与函数式接口一起使用,使得代码更加简洁和易读。
  2. 函数式接口:
    函数式接口是只有一个抽象方法的接口。
    Java 8中引入了@FunctionalInterface注解来显式声明函数式接口。
    这使得Lambda表达式可以方便地实现这些接口。
  3. 方法引用:
    方法引用是Lambda表达式的一种简写形式,可以直接引用现有的方法。
    语法:ClassName::methodName。
    方法引用使得代码更加简洁,并提高了可读性。
  4. Stream API:
    Stream API提供了一种功能强大的操作集合数据的新方式。
    它支持顺序流和并行流,可以轻松实现过滤、排序、映射和减少等操作。
    Stream API使得集合操作更加高效和易于理解。
  5. 接口运行定义默认方法和静态方法:
    Java 8允许在接口中定义默认方法静态方法,即带有实现的接口方法。
    这使得接口的演化更加灵活,而无需破坏现有的实现。
  6. Optional类:
    Optional类是Java 8中引入的一个非常有用的工具,用于处理可能为null的值。
    它的主要目的是减少空指针异常(NullPointerException),使得代码更加健壮和可读。
    Optional类提供了多种方法来处理可能为null的值,如isPresent()、isEmpty()、get()、orElse()等。
  7. 新的日期和时间API:
    Java 8引入了新的日期和时间API,包括LocalDate、LocalTime、LocalDateTime、Instant、Duration以及Period等类。
    新的API比之前的Date类更加丰富和功能齐全,解决了之前Date类转化时的线程安全问题。
  8. 重复注解与类型注解:
    Java 8支持重复注解,即允许在同一个元素上多次使用相同的注解。
    同时,Java 8也引入了类型注解,允许在类型上使用注解,如方法返回类型、字段类型等。
  9. JVM改进:
    Java 8对JVM进行了一些改进,如移除了永久代(PermGen),加入了元数据区(Metaspace)等。
    这些改进有助于提升Java应用的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值