今天就跟大家聊聊有关Java中怎么实现Thread队列,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Java Thread队列一直是我们需要掌握的代码。下面我们就基本思想:建立了一个队列,为每一个Java Thread队列保存了一个对象锁,保证按顺序执行。线程启动的时候,使随机的,但是执行代码是按顺序的。
import java.util.LinkedList; import java.util.Queue; public class ThreadTest { private static Queue qThread=new LinkedList();//线程同步对象队列 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++; } } } 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("启动"+this.getName()+"..."); try { sleep(3000);//等待3秒,为了测试 } 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("启动"+this.getName()+"..."); try { sleep(3000);//等待3秒,为了测试 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("停止"+this.getName()+"..."); ThreadTest.notifyThread(); } }
看完上述内容,你们对Java中怎么实现Thread队列有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。