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

2020-02-05  本文已影响0人  Children乏

数组一:{“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:

上一篇下一篇

猜你喜欢

热点阅读