美文网首页
【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