您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)Java中怎么實(shí)現(xiàn)Thread隊(duì)列,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
Java Thread隊(duì)列一直是我們需要掌握的代碼。下面我們就基本思想:建立了一個(gè)隊(duì)列,為每一個(gè)Java Thread隊(duì)列保存了一個(gè)對(duì)象鎖,保證按順序執(zhí)行。線程啟動(dòng)的時(shí)候,使隨機(jī)的,但是執(zhí)行代碼是按順序的。
import java.util.LinkedList; import java.util.Queue; public class ThreadTest { private static Queue qThread=new LinkedList();//線程同步對(duì)象隊(duì)列 public static synchronized void putObject(Object t){ qThread.offer(t); } public static synchronized Object getObject(){ return qThread.poll(); } public static void waitThread(Object t) throws InterruptedException{ synchronized(t){ t.wait(); } } public static void notifyThread(){ Object obj=ThreadTest.getObject(); synchronized(obj){ obj.notify(); } } public static void main(String[] args) throws InterruptedException { int i = 0; boolean isFirst=true; while (i < 10) { Object obj=new Object(); if(i>0){ isFirst=false; ThreadTest.putObject(obj); } Thread t2 = new Thread2(isFirst,obj); Object obj2=new Object(); ThreadTest.putObject(obj2); Thread t3 = new Thread3(obj2); t2.start(); t3.start(); i++; } } } /** * 線程2 * * @author Harry.WANG * */ class Thread2 extends Thread { private boolean isFirst=false; private Object obj; public Thread2(boolean f,Object obj){ this.isFirst=f; this.obj=obj; } @Override public void run() { if(!this.isFirst){ System.out.println(this.getName()+"等待..."); try{ ThreadTest.waitThread(obj); }catch(InterruptedException e){ e.printStackTrace(); } } System.out.println("啟動(dòng)"+this.getName()+"..."); try { sleep(3000);//等待3秒,為了測(cè)試 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("停止"+this.getName()+"..."); ThreadTest.notifyThread(); } } class Thread3 extends Thread { private Object obj; public Thread3(Object obj){ this.obj=obj; } @Override public void run() { System.out.println(this.getName()+"等待..."); try{ ThreadTest.waitThread(obj); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("啟動(dòng)"+this.getName()+"..."); try { sleep(3000);//等待3秒,為了測(cè)試 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("停止"+this.getName()+"..."); ThreadTest.notifyThread(); } }
看完上述內(nèi)容,你們對(duì)Java中怎么實(shí)現(xiàn)Thread隊(duì)列有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。