亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談synchronized方法對非synchronized方法的影響

 更新時(shí)間:2017年10月10日 09:00:52   作者:/*小神經(jīng)*/  
下面小編就為大家?guī)硪黄獪\談synchronized方法對非synchronized方法的影響。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

StringBuilder是線程不安全的類。

StringBuffer是線程安全的,因?yàn)樗锩娴姆椒恿藄ynchronized。

今天寫了一段代碼測試了一下:用循環(huán)開啟10個(gè)線程,調(diào)用StringBuffer(StringBuilder)的append追加1 到 10 。

結(jié)果預(yù)期一樣:線程不安全的StringBuilder會漏掉一些數(shù)字,

public static void main(String[] args) throws InterruptedException {
  StringBuffer buffer = new StringBuffer();
  StringBuilder builder = new StringBuilder();
  // 開啟十個(gè)線程,分別對buffer 和 builder 操作  
  for(int i = 0; i < 10; i++) {
   int j = i;
   new Thread(new Runnable() {
    public void run() {
     try {
      Thread.sleep(500); //造成阻塞
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     builder.append(j);
    }
   }).start();
  }
  //等待以上操作完成
  Thread.sleep(1000);
  // 打印結(jié)果
  System.out.println("builder:"+builder);
 }

線程安全的StringBuffer則追加了全部10個(gè)數(shù)字:

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 開啟十個(gè)線程,分別對buffer 和 builder 操作  
 for(int i = 0; i < 10; i++) {
  int j = i;
  new Thread(new Runnable() {
   public void run() {
    try {
     Thread.sleep(500); //造成阻塞
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    buffer.append(j);
   }
  }).start();
 }
 //等待以上操作完成
 Thread.sleep(1000);
 // 打印結(jié)果
 System.out.println("buffer:"+buffer);
}

這時(shí):如果我同時(shí)操作builder和buffer,且先調(diào)用buffer的append,這時(shí)每次操作因?yàn)閎uilder和buffer在同一個(gè)線程,builder的方法因?yàn)閎uffer阻塞了線程而被變成“同步”的方法,同樣append了10個(gè)數(shù)字

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 開啟十個(gè)線程,分別對buffer 和 builder 操作  
 for(int i = 0; i < 10; i++) {
  int j = i;
  new Thread(new Runnable() {
   public void run() {
    try {
     Thread.sleep(500); //造成阻塞
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    buffer.append(j);
    builder.append(j);
   }
  }).start();
 }
 //等待以上操作完成
 Thread.sleep(1000);
 // 打印結(jié)果
 System.out.println("buffer:"+buffer);
 System.out.println("builder:"+builder);
}

以上這篇淺談synchronized方法對非synchronized方法的影響就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • jmeter下載及安裝配置教程(win10平臺為例)

    jmeter下載及安裝配置教程(win10平臺為例)

    Apache?JMeter是Apache組織開發(fā)的基于Java的壓力測試工具,Apache?jmeter?可以用于對靜態(tài)的和動態(tài)的資源(文件,Servlet,Perl腳本,java?對象,數(shù)據(jù)庫和查詢,F(xiàn)TP服務(wù)器等等)的性能進(jìn)行測試,本文給大家介紹jmeter下載及安裝配置過程,感興趣的朋友一起看看吧
    2021-12-12
  • IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法

    IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法

    這篇文章主要介紹了IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java集合中的LinkedHashSet源碼解讀

    Java集合中的LinkedHashSet源碼解讀

    這篇文章主要介紹了Java集合中的LinkedHashSet源碼解讀,在LinkedHashMap中,雙向鏈表的遍歷順序通過構(gòu)造方法指定,如果沒有指定,則使用默認(rèn)順序?yàn)椴迦腠樞?即accessOrder=false,需要的朋友可以參考下
    2023-12-12
  • Java使用HashMap映射實(shí)現(xiàn)消費(fèi)抽獎(jiǎng)功能

    Java使用HashMap映射實(shí)現(xiàn)消費(fèi)抽獎(jiǎng)功能

    這篇文章主要為大家詳細(xì)介紹了Java使用HashMap映射實(shí)現(xiàn)消費(fèi)抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • IDEA常量字符串過長問題及解決方案

    IDEA常量字符串過長問題及解決方案

    在編譯Java項(xiàng)目時(shí)遇到“常量字符串過長”錯(cuò)誤,可以通過修改編譯器設(shè)置解決,具體方法是進(jìn)入IDE的設(shè)置(File>>Settings>>Build, Execution, Deployment>>Compiler>>Java Compiler),將使用的編譯器更改為Eclipse,如果問題依舊
    2024-10-10
  • SpringCloudAlibaba Nacos開啟鑒權(quán)解決跳過登錄頁面問題

    SpringCloudAlibaba Nacos開啟鑒權(quán)解決跳過登錄頁面問題

    對于Nacos,如果需要開啟權(quán)限控制,可以在 Nacos 控制臺上進(jìn)行配置,本文主要介紹了SpringCloudAlibaba Nacos開啟鑒權(quán)解決跳過登錄頁面問題,感興趣的可以了解一下
    2023-10-10
  • 線程池滿Thread?pool?exhausted排查和解決方案

    線程池滿Thread?pool?exhausted排查和解決方案

    這篇文章主要介紹了線程池滿Thread?pool?exhausted排查和解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java實(shí)現(xiàn)客戶管理系統(tǒng)

    java實(shí)現(xiàn)客戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • ActiveMQ基于zookeeper的主從(levelDB Master/Slave)搭建

    ActiveMQ基于zookeeper的主從(levelDB Master/Slave)搭建

    這篇文章主要介紹了ActiveMQ基于zookeeper的主從levelDB Master/Slave搭建,以及Spring-boot下的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • spring  mybatis多數(shù)據(jù)源實(shí)例詳解

    spring mybatis多數(shù)據(jù)源實(shí)例詳解

    本文主要介紹sping mybatis多數(shù)據(jù)源處理,在開發(fā)過程中經(jīng)常會遇到多個(gè)數(shù)據(jù)庫,這里給大家舉例說明如何處理,希望能幫助有需要的小伙伴
    2016-07-07

最新評論