java随笔
-
String与Stringbuffer和StringBuilder
String 跟其他两个类的区别是
String是final类型,每次声明的都是不可变的对象,
所以每次操作都会产生新的String对象,然后将指针指向新的String对象。StringBuffer,StringBuilder都是在原有对象上进行操作
所以,如果需要经常改变字符串内容,则建议采用这两者。
StringBuffer vs StringBuilder
前者是线程安全的,后者是线程不安全的。
线程不安全性能更高,所以在开发中,优先采用StringBuilder.
StringBuilder > StringBuffer > String什么是线程安全?
当多个对访问一个类,对象,或者方法时,数据是始终都能正确表现,那么这个就称为线程安全
StringBuffer 为什么安全?
因为在Stringbuffer内部类中,每一个方法都是synchronized修饰的.
那么什么是synchronized?
Synchronized(同步方法/代码块): 可以在任意类及方法上面加锁,而加锁的这段代码称为“互斥区”或者“临界区”。
Java平台中,因为有内置锁的机制,每个对象都有锁的功能。Java虚拟机会为每个对象维护两个“池”.
对于任意的对象objectX,objectX的Entry Set用于存储等待获取objectX这个锁的所有线程,也就是传说中的锁池。
objectX的Wait Set用于存储执行了objectX.wait()/wait(long)的线程,也就是等待池。
一个线程想要执行synchronized修饰的方法里的代码:
1、 尝试获得锁
2 、如果拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会进入“锁池”,不断的尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁。
什么时候使用?
单线程性能优先.
多线程、有边界值(买票问题)优先使用StringBuffer
使用?
.append
一个线程访问一个资源,哪怕使用的是stringbuilder,那也是安全的,放心使用
-
synchronized和Lock的区别是什么?
区别:
1、lock是一个接口,而synchronized是java的一个关键字。
2、synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁;而lock发生异常时,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。

浙公网安备 33010602011771号