資料型別String常量池的特性

2021-07-30 21:10:08 字數 1313 閱讀 7860

package com.test.thread.stringandsyn;

/** * synchronized(string)同步塊與string聯合使用

*@author admin

* 2023年4月20日

*/public

class

service }}

public

static

void

main(string args)

}class threada extends thread

@override

public

void

run() catch (interruptedexception e)

}}class threadb extends thread

@override

public

void

run() catch (interruptedexception e) }}

執行結果:

出現這樣的情況是因為string傳入的兩個值都是aaaa,兩個執行緒只有相同的資源所以造成執行緒b不能執行。這就是string常量池所帶來的問題,因此大多數情況下,同步的synchronized**塊都不使用string作為鎖物件 比如new object()例項化乙個object物件,但它並不放入快取中

修改**如下 會出現交替列印

package com.test.thread.stringandsyn;

/** * 交替列印的原因是持有鎖不是同乙個

*@author admin

* 2023年4月20日

*/public

class

service2 }}

public

static

void

main(string args)

}class threadaa extends thread

@override

public

void

run() catch (interruptedexception e)

}}class threadbb extends thread

@override

public

void

run() catch (interruptedexception e) }}

String常量池的理解

字串的分配,和其他的物件分配一樣,耗費高昂的時間與空間代價,作為最基礎的資料型別,大量頻繁的建立字串,極大程度地影響程式的效能 jvm為了提高效能和減少記憶體開銷,在例項化字串常量的時候進行了一些優化 為字串開闢乙個字串常量池,類似於快取區 建立字串常量時,首先堅持字串常量池是否存在該字串 存在該字...

常量的資料型別

difine false 0x0 用預定義語句能定義常量 difine true 0x1 這裡定義 false 為 0,true 為 1 在程式中用到 false 編譯時自動用 0 替換,同理 true 替換為 1 unsigned int code a 100 這一句用 code 把 a 定義在程...

資料型別 string

單引號建立字串 str0 php xust echo str0 echo 單引號中的單引號需要轉義 雙引號建立字串與單引號不同 可以解釋變數 str1 php echo str1 echo str3 php echo str3 echo 用heredoc 語法來建立字串 適用於大量字串的情況 優化的...