真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

StringBuilder是線程不安全的類。

我們擁有10余年網(wǎng)頁設計和網(wǎng)站建設經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設計師為您提供的解決方案。為企業(yè)提供網(wǎng)站制作、成都網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、手機網(wǎng)站開發(fā)、H5技術、等業(yè)務。無論您有什么樣的網(wǎng)站設計或者設計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設計服務并滿足您的需求。

StringBuffer是線程安全的,因為它里面的方法加了synchronized。

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

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

public static void main(String[] args) throws InterruptedException {
  StringBuffer buffer = new StringBuffer();
  StringBuilder builder = new StringBuilder();
  // 開啟十個線程,分別對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);
  // 打印結果
  System.out.println("builder:"+builder);
 }

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

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

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 開啟十個線程,分別對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);
 // 打印結果
 System.out.println("buffer:"+buffer);
}

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

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

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 開啟十個線程,分別對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);
 // 打印結果
 System.out.println("buffer:"+buffer);
 System.out.println("builder:"+builder);
}

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

以上這篇淺談synchronized方法對非synchronized方法的影響就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。


網(wǎng)頁標題:淺談synchronized方法對非synchronized方法的影響
URL分享:http://weahome.cn/article/pisdds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部