美文网首页
【Java面试题】多线程交替打印

【Java面试题】多线程交替打印

作者: Children乏 | 来源:发表于2020-02-05 18:08 被阅读0次

数组一:{“1”,“2”,“3”,...,“26”}
数组二:{“A”,“B”,“C”,...,“Z”}

使用两个线程交替打印:“A1B2C3D4E5F6...”

使用LinkedTransferQueue

public static void main(String[] args) {

        final char[] nums = "123456".toCharArray();
        final char[] words = "ABCDEF".toCharArray();

        final LinkedTransferQueue<Object> ltq = new LinkedTransferQueue<>();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (char num : nums) {
                    try {
                        // take方法是个阻塞方法
                        System.out.print(ltq.take());
                        // transfer方法是个阻塞方法
                        ltq.transfer(num);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (char word : words) {
                    try {
                        // transfer方法是个阻塞方法
                        ltq.transfer(word);
                        // take方法是个阻塞方法
                        System.out.print(ltq.take());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

    }

执行结果

A1B2C3D4E5F6

take、transfer均为阻塞方法

LinkedTransferQueue:

  • 容量为0

  • 类似套袖:

  • 左边给右边递(transfer)东西,左边会一直举(阻塞)着,直到右边取(take)走;

  • 左边向右边取(take)东西,左边会一直举(阻塞)着,直到右边交(transfer)出;

相关文章

网友评论

      本文标题:【Java面试题】多线程交替打印

      本文链接:https://www.haomeiwen.com/subject/abasxhtx.html