1. String, StringBuilder, StringBuffer的比較
要進(jìn)行字符串的翻轉(zhuǎn),可以直接使用java的StringBuffer.reverse()
String,StringBuffer和StringBuilder的區(qū)別
String其實(shí)是一個(gè)final的類,每次修改一個(gè)String對象,其實(shí)都是從常量池分配一個(gè)新的,而不是在原來的對象上進(jìn)行修改
StringBuffer和StringBuilder在修改的時(shí)候,都是在原有的對象基礎(chǔ)上進(jìn)行修改,這點(diǎn)不同于String
StringBuffer可以在多線程的環(huán)境中保證正確運(yùn)行,而StringBuilder只能在單線程的環(huán)境中使用,不是線程安全的。但是StringBuilder在大多數(shù)實(shí)現(xiàn)下都快于StringBuffer。
2. 什么是線程安全?
線程安全問題發(fā)生的前提:
- 線程安全首先是發(fā)生在多線程的環(huán)境中
- 多個(gè)線程必須操縱同一個(gè)對象,如果每個(gè)線程操縱的都是不同的對象,則不會發(fā)生線程安全問題
- 必然包含修改操作,如果多個(gè)線程只是讀取一個(gè)對象,那么也不存在線程安全的問題
java中哪些數(shù)據(jù)可能會被線程共享,哪些不會呢?這個(gè)需要參考jvm的內(nèi)存分配方式,一般來說,對象的成員和靜態(tài)變量會被線程共享。局部變量則不會。
java對單個(gè)對象共享的一些方式
線程安全原理性分析
- JVM的內(nèi)存分配策略是什么?
Java中線程自己擁有哪些資源,共享哪些資源? - java中被final類修飾的各種情況是什么意思?
- C++中被final類修飾的各種情況是什么意思?