摘要:如有不對的地方,請多多指正的使用主要有如下兩種場景所謂的多線程安全,只是針對單純地調用某個方法它是有同步機制的。的多線程安全,在組合操作時不是線程安全的。
在網上搜了不少文章,發現有不少沒講清楚的,也有不少好文,本文希望更易懂地描述該問題。如有不對的地方,請多多指正~~
vector的使用主要有如下兩種場景:
(1)vector所謂的多線程安全,只是針對單純地調用某個方法它是有同步機制的。如add,多個線程都在對同一個容器add元素,vector能夠保證最后總數是正確的,而ArrayList沒有同步機制,就無法保證。
(2)vector的多線程安全,在組合操作時不是線程安全的。比如一個線程先調用vector的size方法得到有10個元素,再調用get(9)方法獲取最后一個元素,而另一個線程調用remove(9)方法正好刪除了這個元素,那第一個線程就會拋越界異常。
總結:
(1)在需要對容器進行組合操作時,vector不適用(需要自己用synchronized將組合操作進行同步);
(2)僅在上述第一種場景時,才需要使用vector
public class TestMultiThread {
private static Vectorvec = new Vector (); private static List lst = new ArrayList (); public void f() { TestThread testThread1 = new TestThread(); TestThread testThread2 = new TestThread(); Thread thread1 = new Thread(testThread1); Thread thread2 = new Thread(testThread2); thread1.start(); thread2.start(); } public static void main(String[] args) { TestMultiThread testMultiThread = new TestMultiThread(); testMultiThread.f(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("vec size is " + vec.size()); System.out.println("lst size is " + lst.size()); } private class TestThread implements Runnable { @Override public void run() { for (int i = 0; i < 1000; ++i) { vec.add(i); lst.add(i); } } }
}
如上程序運行結果:
vec size is 2000
lst size is 1999
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67344.html
摘要:如有不對的地方,請多多指正的使用主要有如下兩種場景所謂的多線程安全,只是針對單純地調用某個方法它是有同步機制的。的多線程安全,在組合操作時不是線程安全的。 在網上搜了不少文章,發現有不少沒講清楚的,也有不少好文,本文希望更易懂地描述該問題。如有不對的地方,請多多指正~~ vector的使用主要有如下兩種場景:(1)vector所謂的多線程安全,只是針對單純地調用某個方法它是有同步機制的...
摘要:但是單核我們還是要應用多線程,就是為了防止阻塞。多線程可以防止這個問題,多條線程同時運行,哪怕一條線程的代碼執行讀取數據阻塞,也不會影響其它任務的執行。 1、多線程有什么用?一個可能在很多人看來很扯淡的一個問題:我會用多線程就好了,還管它有什么用?在我看來,這個回答更扯淡。所謂知其然知其所以然,會用只是知其然,為什么用才是知其所以然,只有達到知其然知其所以然的程度才可以說是把一個知識點...
摘要:程序正常運行,輸出了預期容量的大小這是正常運行結果,未發生多線程安全問題,但這是不確定性的,不是每次都會達到正常預期的。另外,像等都有類似多線程安全問題,在多線程并發環境下避免使用這種集合。 這個問題是 Java 程序員面試經常會遇到的吧。 工作一兩年的應該都知道 ArrayList 是線程不安全的,要使用線程安全的就使用 Vector,這也是各種 Java 面試寶典里面所提及的,可能...
摘要:近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。現在每天給自己在面試題編寫的任務是題,有時候忙起來可能就沒有時間寫了,但是爭取日更,即使當天沒更也會在之后的更新補上。 ????近段時間在準備實習的面試,在網上看到一份面試題,就慢慢試著做,爭取每天積累一點點。????暫時手頭上的面試題只有一份,題量還是挺大的,有208題,所以可能講的不是很詳細,只是我自...
摘要:說一說迭代器通過集合對象獲取其對應的對象判斷是否存在下一個元素取出該元素并將迭代器對象指向下一個元素取出元素的方式迭代器。對于使用容器者而言,具體的實現不重要,只要通過容器獲取到該實現的迭代器的對象即可,也就是方法。 前言 歡迎關注微信公眾號:Coder編程獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!** 本章主要介紹Collection集合相關知識,結合面試中會提到...
閱讀 466·2021-10-09 09:57
閱讀 470·2019-08-29 18:39
閱讀 811·2019-08-29 12:27
閱讀 3028·2019-08-26 11:38
閱讀 2667·2019-08-26 11:37
閱讀 1285·2019-08-26 10:59
閱讀 1376·2019-08-26 10:58
閱讀 989·2019-08-26 10:48