1. String, StringBuilder, StringBuffer的比较
要进行字符串的翻转,可以直接使用java的StringBuffer.reverse()
String,StringBuffer和StringBuilder的区别
String其实是一个final的类,每次修改一个String对象,其实都是从常量池分配一个新的,而不是在原来的对象上进行修改
StringBuffer和StringBuilder在修改的时候,都是在原有的对象基础上进行修改,这点不同于String
StringBuffer可以在多线程的环境中保证正确运行,而StringBuilder只能在单线程的环境中使用,不是线程安全的。但是StringBuilder在大多数实现下都快于StringBuffer。
2. 什么是线程安全?
线程安全问题发生的前提:
- 线程安全首先是发生在多线程的环境中
- 多个线程必须操纵同一个对象,如果每个线程操纵的都是不同的对象,则不会发生线程安全问题
- 必然包含修改操作,如果多个线程只是读取一个对象,那么也不存在线程安全的问题
java中哪些数据可能会被线程共享,哪些不会呢?这个需要参考jvm的内存分配方式,一般来说,对象的成员和静态变量会被线程共享。局部变量则不会。
java对单个对象共享的一些方式
线程安全原理性分析
- JVM的内存分配策略是什么?
Java中线程自己拥有哪些资源,共享哪些资源? - java中被final类修饰的各种情况是什么意思?
- C++中被final类修饰的各种情况是什么意思?