❶ java中的隊列都有哪些,有什麼區別
阻塞隊列、普通隊列,非阻塞隊列。
阻塞隊列與普通隊列的而區別在於,當隊列是空時,從隊列中獲取元素的操作會被阻塞,或則當隊列是滿的時,往隊列中增加元素會被阻塞,試圖從空的隊列中取元素的線程或從滿的隊列中添加元素的線程同樣會被阻塞。
❷ Java隊列問題
題目描述不是特別清晰
List<String> list1; //size>0
List<String> list2 = new ArrayList<String>();
//如果不想改變原有隊列,則new出新的Obj 並使他們的值一樣
String a = list1.get(index); //index 為你需要的下標
String b=new String(a);
list2.add(b);
❸ java有沒有循環隊列 線程安全
jdk沒有線程安全的循環隊列,
ConcurrentLinkedQueue是線程安全非阻塞的隊列
❹ java中如何對某個方法或者某個代碼塊使用阻塞隊列來保證並發情況下線程是安全的
synchronize加在函數方法或者代碼塊,就能按你說的保證線程安全,原理是多線程進入時候系統會只允許一個線程執行那些語句
❺ java哪個隊列能保證數據的唯一性
HashSet 保證元素唯一性的方法
自己的理解:當HashSet中放入了兩個對象後,默認他們的hashCode都是不一樣的,因此不需要調用equals方法就能確定這兩個對象不是同一個,但是如果這兩個對象的值是一樣的,這種判斷結果就不符合要求了,因此需要重寫hashcode方法,將兩個對象的hashcode值設為相同,這樣就可以進入equals判斷階段,equals方法是繼承自object類的,比較的是對象的地址值,所以判斷的結果也必定不同,這又不符合要求了,因此也需要重寫equals方法。經過改寫以上兩個方法,可以完成兩個對象的比較,只要兩個對象的內容(值)相同,就判斷為同一個對象,不得重復存儲。哈希表就像一個個桶,每個桶都有一個hashcode,只要元素的hashcode相同,equals如果為false,那麼這些元素都掛在這個桶里。
另外,判斷是否包含某元素(contains),list和set也是不同的:
ArrayList:判斷包含,以及刪除,都是依據元素的equals方法。
HashSet:判斷包含,以及刪除,都是依據元素的hashCode方法。當hashCode值相同時,在判斷一次equals方法。
❻ java為什麼要使用隊列
讓我來告訴你答案!你指的是JMS么???選用他的一個好處就是:它可以把不影響用戶執行結果又比較耗時的任務(比如發郵件通知管理員)非同步的扔給JMS服務端去做,而盡快的把屏幕返還給用戶。服務端能夠多線程排隊響應高並發的請求,並保證請求不丟失。還有一種是被動型的:比如兩個平台之間交互的時候對方決定使用JMS隊列,那你也只能跟著他用這個列隊來處理信息流。它允許多線程將信息放入隊列,也能多線程消費。以統一的格式發送請求:例如JSON
❼ java 如何實現一個線程安全的隊列
以下是兩個線程:
import java.util.*;
public class Thread_List_Operation {
//假設有這么一個隊列
static List list = new LinkedList();
public static void main(String[] args) {
Thread t;
t = new Thread(new T1());
t.start();
t = new Thread(new T2());
t.start();
}
}
//線程T1,用來給list添加新元素
class T1 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "為隊列添加了一個元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//線程T2,用來給list添加新元素
class T2 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "為隊列添加了一個元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//結果(亂序)
Thread-0為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
❽ java 隊列
我說一種情況吧。隊列可以用於數據緩沖,比如你一個線程接收數據,這個數據可能會一段時間來的非常迅猛,一段時間又來的比較溫和,這個時候你就可以做一個隊列,一個線程把接收的數據存放到隊列,另外的線程慢慢處理數據,在數據來的迅猛的時候,因為有隊列的緩沖,你處理數據的線程就算處理不過,也不會直接導致系統崩潰,等數據來的溫和的時候,就可以慢慢的消化之前在隊列來不及處理的數據。
❾ java隊列
非阻塞隊列和普通隊列 對於阻塞隊列來說都是一種隊列
再就是阻塞隊列和非阻塞的區別:
阻塞隊列會阻塞 從空隊列中的取值和添加元素到滿隊列的行為
非阻塞隊列則不會 他會拋異常(也可能不拋 看底層實現)
這樣一來就是 只要時間充裕 對阻塞隊列的進出操作都可以實現 那多線程情況下就可以減少一部分並發問題 比如經典的 生產消費者 用非阻塞隊列 必須進行一定同步 不然就可能出現空隊列出隊 滿隊列進隊的 而使用阻塞隊列就不會
但是如果你可以確保生成消費是有規律 或者 在允許范圍出錯 那你可以使用阻塞隊列 來提高效率
說這么多亂七八糟的 還不是要多寫 我打賭我寫了這么多 你看了還是迷糊的
回去寫一遍強多了