在SynchronousQueue中想要增减元素,即入队和同样要涉及到两种方法:put和take。当一种方法调用时,队列会被阻塞,另一种方法等当前任务结束才能调用,可以说整个线程的运行处于安全的状态。下面我们就先介绍SynchronousQueue元素增减的方法,然后就入队和出队的方法分别进行讨论。
1.方法介绍
put(E e) 添加一个非空元素,同时会阻塞住,直到另一个线程调用take()
take() 取出一个元素,如果队列为空,阻塞,直到另一个线程调用put(E e)
2.入队put方法实例
public void put(E e) throws InterruptedException { if (e == null) throw new NullPointerException();// 元素不可为null // 三个参数分别是:传输的元素,是否需要超时,超时的时间 if (transferer.transfer(e, false, 0) == null) { // 如果传输失败,直接让线程中断并抛出中断异常 Thread.interrupted(); throw new InterruptedException(); } }
3.出队take方法实例
public E take() throws InterruptedException { E e = transferer.transfer(null, false, 0); if (e != null) return e; Thread.interrupted(); throw new InterruptedException(); }
以上就是SynchronousQueue在java中的元素增减方法,在理解了SynchronousQueue的用法后,我们就可以对元素的增加或删除有所变动,学会后赶快试试代码的运行吧。