多執行緒+佇列的簡單使用
阿新 • • 發佈:2018-11-06
以前在專案中很少用到佇列,其實佇列對於解決併發很是重要,今天著手看了相關資料並實際簡單操作,如下:
1.佇列的含義:佇列就是一種特殊的線性表,採用FIFO方式,而棧是LIFO方式。
2.常用的佇列:LinkedList實現了Queue的介面
3.佇列的操作:
賦值:queue.offer(); queue.add();
取值:queue.poll(); queue.remove();
其中 add,remove 如果失敗會丟擲異常,而前者會有返回值。
檢視佇列前端資料:queue.element(), queue.peek();
4.例項操作:
A。初始化一個佇列,內部元素為0-50數字
B。啟動100個執行緒同時去取這個佇列的數字,看取數是否衝突。類似100個客戶去秒殺50個商品
package test;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author zxh
*
*/
public class Test extends Thread {
/*
* 初始化一個佇列
*/
public static Queue<String> inintQueue(){
Queue<String> queue = new LinkedList<String>();
for(int i = 0;i<50;i++){
queue.offer(String.valueOf(i));
}
return queue;
}
public static void main(String[] args) {
Queue<String> queue = inintQueue();
System.out.println(queue);
for(int i=0;i<100;i++){
ThreadTest test = new ThreadTest(String.valueOf(i),queue);
test.start();
}
} }
package test;
import java.util.LinkedList; import java.util.Queue;
public class ThreadTest extends Thread{
Queue<String> queue = new LinkedList<String>(); String threadFalg = ""; public ThreadTest(String threadFalg,Queue<String> queue){ this.queue = queue; this.threadFalg = threadFalg; } public void run(){ String qu = queue.poll(); System.out.println(">>>thread is:"+threadFalg+" queue is:"+qu); } }
} }
package test;
import java.util.LinkedList; import java.util.Queue;
public class ThreadTest extends Thread{
Queue<String> queue = new LinkedList<String>(); String threadFalg = ""; public ThreadTest(String threadFalg,Queue<String> queue){ this.queue = queue; this.threadFalg = threadFalg; } public void run(){ String qu = queue.poll(); System.out.println(">>>thread is:"+threadFalg+" queue is:"+qu); } }