溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中怎么實(shí)現(xiàn)Thread隊(duì)列

發(fā)布時(shí)間:2021-07-01 16:52:42 來(lái)源:億速云 閱讀:211 作者:Leah 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(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è)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI