一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java 集合中的類(lèi)關(guān)于線程安全

Java 集合中的類(lèi)關(guān)于線程安全

2020-07-29 14:44lqh Java教程

這篇文章主要介紹了Java 集合中的類(lèi)關(guān)于線程安全的相關(guān)資料,需要的朋友可以參考下

Java集合中那些類(lèi)是線程安全

線程安全類(lèi)

在集合框架中,有些類(lèi)是線程安全的,這些都是jdk1.1中的出現(xiàn)的。在jdk1.2之后,就出現(xiàn)許許多多非線程安全的類(lèi)。 下面是這些線程安全的同步的類(lèi):

vector:就比arraylist多了個(gè)同步化機(jī)制(線程安全),因?yàn)樾瘦^低,現(xiàn)在已經(jīng)不太建議使用。在web應(yīng)用中,特別是前臺(tái)頁(yè)面,往往效率(頁(yè)面響應(yīng)速度)是優(yōu)先考慮的。

statck:堆棧類(lèi),先進(jìn)后出

hashtable:就比hashmap多了個(gè)線程安全

enumeration:枚舉,相當(dāng)于迭代器

除了這些之外,其他的都是非線程安全的類(lèi)和接口。

線程安全的類(lèi)其方法是同步的,每次只能一個(gè)訪問(wèn)。是重量級(jí)對(duì)象,效率較低。

其他:

1. hashtable跟hashmap的區(qū)別

hashtable是線程安全的,即hashtable的方法都提供了同步機(jī)制;hashmap不是線程安全的,即不提供同步機(jī)制 ;hashtable不允許插入空值,hashmap允許!

2. 多線程并發(fā)修改一 個(gè) 集合 怎么辦

用老的Vector/Hashtable類(lèi)

StringBuffer是線程安全,而StringBuilder是線程不安全的。對(duì)于安全與不安全沒(méi)有深入的理解情況下,易造成這樣的錯(cuò)覺(jué),如果對(duì)于StringBuffer的操作均是線程安全的,然而,Java給你的保證的線程安全,是說(shuō)它的方法是執(zhí)行是排它的,而不是對(duì)這個(gè)對(duì)象本身的多次調(diào)用情況下,還是安全的。看看下邊的例子,在StringBufferTest中有一個(gè)數(shù)據(jù)成員contents它是用來(lái)擴(kuò)展的,它的每一次append是線程安全的,但眾多次append的組合并不是線程安全的,這個(gè)輸出結(jié)果不是太可控的,但如果對(duì)于log和getContest方法加關(guān)鍵字synchronized,那么結(jié)果就會(huì)變得非常條理,如果換成StringBuider甚至是append到一半,它也會(huì)讓位于其它在此基礎(chǔ)上操作的線程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class StringBufferTest {
  private StringBuffer contents = new StringBuffer();
  public void log(String message){
   contents.append(System.currentTimeMillis());
   contents.append("; ");
   contents.append(Thread.currentThread().getName());
   for(int i=0;i<10000;i++){
    contents.append(i); 
     contents.append(message);  //append本身是線程安全的,修改contents時(shí),其它線程無(wú)法訪問(wèn)。
     contents.append("\n");
   }
   contents.append("\n\n");
  }
  public void getContents(){
   System.out.println(contents);
  }
}
 
class RunThread extends Thread{
  String message;
  StringBufferTest buffer;
  public RunThread(StringBufferTest buffer, String message){
   this.buffer = buffer;
   this.message = message;
  }
  public void run(){
   while(true){
     buffer.log(message);
     buffer.getContents();
   }
  }
  public static void main(String[] args) {
   StringBufferTest ss = new StringBufferTest();
   new RunThread(ss, "you").start();
   new RunThread(ss, "me").start();
   new RunThread(ss, "she").start();
  }
}

        StringBuilder和StringBuffer的方法是一模一樣,就是一個(gè)多線程和一個(gè)單線程的問(wèn)題。線程調(diào)用同一StringBuffer 的append方法,這跟他是不是線程安全沒(méi)有關(guān)系的,除非你的結(jié)果是append的一系列字符串變亂了,那才能說(shuō)明他是線程不安全的。線程安全是指任何時(shí)刻都只有一個(gè)線程訪問(wèn)臨界資源。線程安全 并不是說(shuō)他的一系列操作是同步的 只是對(duì)于他執(zhí)行某個(gè)方法的時(shí)候不允許別的線程去改變。針對(duì)一個(gè)類(lèi)來(lái)說(shuō)是不是線程安全就要看,多個(gè)線程在同時(shí)在運(yùn)行,這些線程可能會(huì)同時(shí)執(zhí)行某個(gè)方法。但是每次運(yùn)行結(jié)果和單線程執(zhí)行的結(jié)果一樣,那么就可以說(shuō)是線程安全的。因?yàn)閘og方法沒(méi)有上鎖,每個(gè)現(xiàn)在在append鎖釋放后,都可能得到cpu的執(zhí)行片段。

但不要對(duì)多線程安全存在誤解:

?
1
2
3
4
5
6
7
public String toString(){
  StringBuffer buffer = new StringBuffer();
  buffer.append('<');
  buffer.append(this.name);
  buffer.append('>');
  return buffer.toString();
 }

       這個(gè)代碼是完全線程安全的,在方法內(nèi)部定義的變量,在每個(gè)線程線程進(jìn)入的時(shí)候都會(huì)創(chuàng)建這個(gè)局部變量!不涉及線程安全問(wèn)題。通常涉及系統(tǒng)安全的變量一般都是成員變量! stringBuffer本身的內(nèi)部實(shí)現(xiàn)是現(xiàn)場(chǎng)安全的!線程安全那是類(lèi)本身提供的功能是安全的。即你提供插入一個(gè)字符串,那么這個(gè)字符串插入是安全的,但是要插入兩個(gè)字符串,兩個(gè)的順序你來(lái)定,這之間如果有別的插入出錯(cuò)就不管類(lèi)的事情了,是你自己代碼的問(wèn)題。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

原文鏈接:http://www.cnblogs.com/tuojunjie/p/6089076.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青青草免费 | 亚洲区精品 | 国产精品66福利在线观看 | 双性总裁被调教1v1 双性双根 | 国产一成人精品福利网站 | 动漫人物差差差动漫人物免费观看 | 国产v在线播放 | 羞羞答答免费人成黄页在线观看国产 | 色淫影院 | 亚洲欧美视频在线播放 | 精品免费国产 | 欧美高清一区 | 国产成人精品午夜在线播放 | 天天做天天爽天天谢 | 春意影院午夜爽爽爽免费 | 亚洲春色综合另类网蜜桃 | 九九九九在线精品免费视频 | 久久这里只有精品国产精品99 | 2012手机在线中文字幕 | 波多野结衣被绝伦强在线观看 | 欧美日韩高清完整版在线观看免费 | 五月天精品视频播放在线观看 | 国产在线精品一区二区高清不卡 | 国产美女久久精品香蕉69 | 动漫美女羞羞视频 | 国产成人久久精品推最新 | 亚洲2017天堂色无码 | 韩剧网3600热播剧 | 欧美精品国产第一区二区 | 日本一卡2卡3卡4卡乱 | 狠狠插入 | 果冻传媒在线视频播放观看 | 歪歪视频在线播放无遮挡 | 欧美夜夜精品一级爽 | a v在线男人的天堂观看免费 | 欧美特黄特色aaa大片免费看 | 99成人免费视频 | 婷婷久久综合九色综合九七 | 亚洲精品综合 | 美女操批 | 日韩日日日 |