本文目錄一覽:
JAVA如何用隊列實現並發?
如果是搶資源,在不作弊的情況下
按照先來先得的規則
,那麼比較簡單的實現就是隊列
,不管請求的並發多高,如果用線程來實現為用戶服務,也就是說
來一個人請求資源那麼就啟動一個線程,那CPU執行線程總是有順序的,比如
當前三個人(路人甲路人乙路人丙)請求A資源
,那服務端就起了三個線程為這三個人服務,假設
這三個人不太幸運在請求的時候沒有及時的獲得CPU時間片,那麼他們三個相當於公平競爭CPU資源,而CPU選擇運行線程是不確定順序的
,又假設
選中了路人丙的線程運行那麼將其放入隊列就好了,路人乙,路人丙以此類推
,那可能會想為什麼不及時的處理呢
,因為後續的操作可能是耗時操作對於線程的佔用時間較長那請求資源的人多了服務端就可能掛了
java中怎麼實現隊列
public class QueueE {
private Object[] data=null;
private int maxSize; //隊列容量
private int front; //隊列頭,允許刪除
private int rear; //隊列尾,允許插入
//構造函數
public Queue(){
this(10);
}
public Queue(int initialSize){
if(initialSize =0){
this.maxSize = initialSize;
data = new Object[initialSize];
front = rear =0;
}else{
throw new RuntimeException(“初始化大小不能小於0:” + initialSize);
}
}
//判空
public boolean empty(){
return rear==front?true:false;
}
//插入
public boolean add(E e){
if(rear== maxSize){
throw new RuntimeException(“隊列已滿,無法插入新的元素!”);
}else{
data[rear++]=e;
return true;
}
}
//返回隊首元素,但不刪除
public E peek(){
if(empty()){
throw new RuntimeException(“空隊列異常!”);
}else{
return (E) data[front];
}
}
//出隊
public E poll(){
if(empty()){
throw new RuntimeException(“空隊列異常!”);
}else{
E value = (E) data[front]; //保留隊列的front端的元素的值
data[front++] = null; //釋放隊列的front端的元素
return value;
}
}
//隊列長度
public int length(){
return rear-front;
}
}
java中的隊列用什麼實現
隊列的實現單純的是數據結構的問題,既可以用鏈表結構實現隊列,也可以用數組實現。這和語言不是緊密關係,java可以這樣實現,C、C++ 也可以。
原創文章,作者:JEFR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141149.html