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 語法來建立字串 適用於大量字串的情況 優化的...