2020-09-03 String及锁

tech2023-08-15  93

1、String,StringBuilder,StringBuffer的区别 1. 可变性来讲String的是不可变的,StringBuilder,StringBuffer的长度是可变的 2. 从运行速度上来讲StringBuilder > StringBuffer > String 3. 从线程安全上来StringBuilder是线程不安全的,而StringBuffer,String是线程安全的

public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];

final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性,所以String也是安全的

@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }

在String使用‘+’进行拼接时底层采用了初始化了一个StringBuilder进行拼接的,toString方法是生成了一个新的String对象而不是更改旧的 String内容,相当于把旧的String引用指向了新的String对象。 String不可以被继承,因为它是final修饰的,并且StringBuilder,StringBuffer也是如此都被final关键字修饰。 StringBuffer类内,常用的方法都使用了synchronized 进行同步所以是线程安全的,StringBuilder没有,所以StringBuilder比StringBuffer速度快。 2、synchronized加锁的3种形式:方法锁,对象锁(this),类锁(Demo.Class) 1、锁普通同步方法 ,锁是当前实例对象 2、锁静态同步方法,锁是当前类的class对象 3、锁同步方法块,锁是Synchonized括号配置的对象 3、synchronized的原理 synchronized实现依赖于JVM 的 monitor 监视器锁,任何对象都有一个monitor与之关联,当一个monitor被持有后,它将被处于锁定状态,当线程执行到此的时候,会尝试获取对象所对应的monitor的所有权,即获取获得对象的锁。执行完毕或执行异常后会自动释放锁。 4、几种常用的锁: 1、乐观锁: 2、悲观锁:

最新回复(0)