Java LinkedTransferQueue tryTransfer()方法及示例
LinkedTransferQueue类的 tryTransfer() 方法是Java中的一个内置函数,通常用于将一个元素转移到等待接收它的线程中,如果没有线程在等待,那么它将在不将元素加入队列的情况下终止,或者你也可以通过向函数传递时间量及其单位来使它等待一定的时间。
在LinkedTransferQueue类中,根据传递给它的参数,有两种类型的 tryTransfer()方法。
tryTransfer(E e )
通常用于将一个元素转移到一个处于等待状态的线程,如果没有线程在等待,那么它将终止,而不将元素添加到队列中
语法:
public boolean tryTransfer(E e)
参数:
- 这里 E e 是要被转移到处于等待状态的线程的元素。
返回值 :该方法将返回一个 布尔值 ,即如果元素被转移,则为真,否则为假。
异常 :该方法将抛出以下异常。
- NullPointerException – 如果指定的元素是空的。
- InterruptedException – 如果在等待过程中被打断,在这种情况下,元素不会被留在队列中。
下面的程序说明了Java中简单的LinkedTransferQueue.tryTransfer()方法:
程序1: 说明Java中tryTransfer()方法。
// Java program to demonstrate
// the tryTransfer() Method.
import java.util.*;
import java.util.concurrent.*;
class GFG {
public static void main(String args[])
{
// creating an object
// for class LinkedTransferQueue
LinkedTransferQueue<String> g
= new LinkedTransferQueue<String>();
new Thread(new Runnable() {
public void run()
{
try {
System.out.println("transferring an element");
// calling tryTransfer() method
// to transfer the string
g.tryTransfer("is a computer science portal.");
System.out.println("element transfer is complete");
}
catch (NullPointerException e2) {
System.out.println(e2);
System.exit(0);
}
}
}).start();
try {
// here the thread is waiting
// to receive an element.
System.out.println("Geeks for Geeks "
+ g.take());
}
catch (Exception e) {
System.out.println(e);
}
}
}
输出
transferring an element
element transfer is complete
Geeks for Geeks is a computer science portal.
程序2: NullPointerException。
// Java program to demonstrate NullPointerException
// thrown by the tryTransfer() Method.
import java.util.*;
import java.util.concurrent.*;
class GFG {
public static void main(String args[])
{
// create a LinkedTransferQueue object
LinkedTransferQueue<String> g
= new LinkedTransferQueue<String>();
new Thread(new Runnable() {
public void run()
{
try {
System.out.println("transferring an element");
// calling tryTransfer() method
// to transfer the null element
g.tryTransfer(null);
System.out.println("element transfer is complete");
}
catch (NullPointerException e2) {
System.out.println(e2);
System.exit(0);
}
}
}).start();
try {
System.out.println("Geeks for Geeks " + g.take());
// here the thread is waiting
// to receive an element.
}
catch (Exception e) {
System.out.println(e);
System.exit(0);
}
}
}
输出
transferring an element
java.lang.NullPointerException
tryTransfer(E e, long timeout, TimeUnit)
通常用于将一个元素转移到一个处于等待状态的线程,如果没有线程在等待,那么它将等待一定的时间,将时间量及其单位作为参数传递给函数。
语法:
public boolean tryTransfer(E e, long timeout, TimeUnit)
参数: 该方法接受三个强制性参数:
- 这里 E e 是要传输给处于等待状态的线程的元素。
- 这里的 long timeout 是指它在终止前应该等待的时间量。
- 这里的 TimeUnit单位 是指长超时的单位。
返回值: 该方法将返回一个 布尔值。 如果元素被转移,它返回true,否则返回false。
异常 :这个方法将抛出以下异常。
- NullPointerException – 如果指定的元素是空的。
- InterruptedException – 如果在等待时被中断,在这种情况下,元素不会被留下排队。
程序1: 通过设置waiting为参数来说明Java中的tryTransfer()方法。
// Java program to demonstrate
// the tryTransfer() Method.
import java.util.*;
import java.util.concurrent.*;
class GFG {
public static void main(String args[])
{
// creating an object for LinkedTransferQueue
LinkedTransferQueue<String> g
= new LinkedTransferQueue<String>();
new Thread(new Runnable() {
public void run()
{
try {
System.out.println("transferring an element");
// calling tryTransfer() method passing amount
// of time and its units as the parameter
// to the function and storing
// its return value in a boolean variable.
boolean a = g.tryTransfer(
"is a computer science portal.",
2000,
TimeUnit.MILLISECONDS);
if (a)
System.out.println("element transfer is complete");
else
System.out.println("element is not transferred ");
}
catch (NullPointerException e2) {
System.out.println(e2);
}
catch (InterruptedException e3) {
System.out.println(e3);
}
}
}).start();
try {
// here thread is made inactive or sleep
// for 2000 milliseconds
Thread.sleep(2000);
// here the thread is ready to receive
System.out.println("Geeks for Geeks " + g.take());
}
catch (Exception e) {
System.out.println(e);
}
}
}
输出
transferring an element
Geeks for Geeks is a computer science portal.
element transfer is complete
程序2: NullPointerException。
// Java program to demonstrate NullPointerException
// thrown by the tryTransfer() Method.
import java.util.*;
import java.util.concurrent.*;
class GFG {
public static void main(String args[])
{
// creating an object
// for class LinkedTransferQueue
LinkedTransferQueue<String> g
= new LinkedTransferQueue<String>();
new Thread(new Runnable() {
public void run()
{
try {
System.out.println("transferring an element");
// calling tryTransfer() method
// to transfer the null element
g.tryTransfer(null, 2000, TimeUnit.MILLISECONDS);
System.out.println("element transfer is complete");
}
catch (NullPointerException e2) {
System.out.println(e2);
System.exit(0);
}
catch (InterruptedException e3) {
System.out.println(e3);
}
}
}).start();
try {
// here thread is made inactive or sleep
// for 2000 milliseconds
Thread.sleep(2000);
// here the thread is ready to receive
System.out.println("Geeks for Geeks "
+ g.take());
}
catch (Exception e) {
System.out.println(e);
}
}
}
输出
transferring an element
java.lang.NullPointerException
参考文献:
- https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedTransferQueue.html#tryTransfer(E)
- https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedTransferQueue.html#tryTransfer(E, %20long, %20java.util.concurrent.TimeUnit)