Java中的LinkedTransferQueue tryTransfer()方法及示例

Java中的LinkedTransferQueue tryTransfer()方法及示例

LinkedTransferQueue类的 tryTransfer() 方法是Java中的内置函数,通常用于向等待接收元素的线程传输元素,如果没有等待的线程,则将终止而不将元素添加到队列中,或者您也可以通过将时间和单位的数量作为参数传递给函数,使其等待一定的时间。
在LinkedTransferQueue类中,根据传递给它的参数,有两种类型的tryTransfer()方法。

tryTransfer(E e)

通常用于向等待状态的线程传输元素,如果没有等待的线程,则将终止而不将元素添加到队列中。
语法:

public boolean tryTransfer(E e)

参数:

  • 这里 E e 是要传输到等待状态的线程的元素。

返回值: 该方法将返回一个 布尔值 ,即如果已传输元素,则为true,否则为false。
异常 : 该方法将引发以下异常。

  • NullPointerException – 如果指定的元素为 null

  • 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程序演示tryTransfer() 方法抛出的NullPointerException。
 
import java.util.*;
import java.util.concurrent.*;
 
class GFG {
    public static void main(String args[])
    {
 
        // 创建一个LinkedTransferQueue对象
        LinkedTransferQueue<String> g
            = new LinkedTransferQueue<String>();
 
        new Thread(new Runnable() {
 
            public void run()
            {
 
                try {
                    System.out.println("传输元素");
 
                    // 调用tryTransfer()方法传输空元素
                    g.tryTransfer(null);
 
                    System.out.println("元素传输完成");
                }
 
                catch (NullPointerException e2) {
 
                    System.out.println(e2);
                    System.exit(0);
                }
            }
        }).start();
 
        try {
 
            System.out.println("与Geeks for Geeks交流 " + g.take());
 
            // 这里线程正在等待接收元素。
        }
        catch (Exception e) {
 
            System.out.println(e);
            System.exit(0);
        }
    }
}

输出结果:

传输元素
java.lang.NullPointerException

tryTransfer(E e, long timeout, TimeUnit)

通常用于将元素传输给处于等待状态的线程,如果没有等待的线程,则通过将时间量和单位作为参数传递给函数来等待一定的时间量。
语法:

public boolean tryTransfer(E e, long timeout, TimeUnit)

参数: 该方法接受三个强制参数:

  • 此处 E e 是要传输到等待状态线程的元素。
  • 此处 long timeout 是指等待终止前等待的时间量。
  • 此处 TimeUnit unit 意味着timeout的单位。

返回值: 该方法将返回一个 布尔值 。如果传输了元素,则返回true,否则返回false。
异常: 该方法将引发以下异常。

  • NullPointerException - 如果指定的元素为空

  • InterruptedException - 如果等待时中断,此时未排队的元素不会被保留。

程序1: 通过将等待设置为其参数,使用Java说明tryTransfer()方法。

// Java程序演示
// tryTransfer()方法。
 
import java.util.*;
import java.util.concurrent.*;
 
class GFG {
    public static void main(String args[])
    {
 
        // 创建LinkedTransferQueue对象
        LinkedTransferQueue<String> g
            = new LinkedTransferQueue<String>();
 
        new Thread(new Runnable() {
 
            public void run()
            {
                try {
 
                    System.out.println("传输元素");
 
                    // 调用tryTransfer()方法,将时间和单位作为参数传递给函数,并将其返回值存储在布尔变量中。
                    boolean a = g.tryTransfer(
                        "是一个计算机科学门户网站。",
                        2000,
                        TimeUnit.MILLISECONDS);
 
                    if (a)
                        System.out.println("元素传输完成");
                    else
                        System.out.println("元素未传输");
                }
                catch (NullPointerException e2) {
                    System.out.println(e2);
                }
                catch (InterruptedException e3) {
                    System.out.println(e3);
                }
            }
        }).start();
 
        try {
 
            // 将线程休眠2000毫秒
            Thread.sleep(2000);
 
            // 此时线程已准备好接收传输的元素
            System.out.println("Geeks for Geeks " + g.take());
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}

输出:

传输元素
Geeks for Geeks 是一个计算机科学门户网站。
元素传输完成

程序2: NullPointerException。

// Java程序演示tryTransfer()方法抛出的
// NullPointerException。
 
import java.util.*;
import java.util.concurrent.*;
 
class GFG {
    public static void main(String args[])
    {
        // 为类LinkedTransferQueue创建一个对象
        LinkedTransferQueue<String> g
            = new LinkedTransferQueue<String>();
 
        new Thread(new Runnable() {
 
            public void run()
            {
                try {
                    System.out.println("传输元素");
 
                    // 调用tryTransfer()方法传递空元素
                    g.tryTransfer(null, 2000, TimeUnit.MILLISECONDS);
 
                    System.out.println("元素传输完成");
                }
                catch (NullPointerException e2) {
                    System.out.println(e2);
                    System.exit(0);
                }
                catch (InterruptedException e3) {
                    System.out.println(e3);
                }
            }
        }).start();
 
        try {
 
            // 将线程休眠2000毫秒
            Thread.sleep(2000);
 
            // 此时线程已准备好接收传输的元素
            System.out.println("Geeks for Geeks "
                               + g.take());
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}

输出:

传输元素
java.lang.NullPointerException

参考资料:

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程