用多线程完成一个小题目(续)

Posted 翔游九天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用多线程完成一个小题目(续)相关的知识,希望对你有一定的参考价值。

接着上次的来讲,就是用两个线程,输出1a2b3c4d5e ...

又发现了一种新的实现方式,相对来说也更简单点。

主要是通过LockSupport来实现,话不多说,上代码:

public class CommunicationC {

    static char[] num = {\'1\', \'2\', \'3\', \'4\', \'5\', \'6\'};
    static char[] chars = {\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'};

    boolean flag = true;

    ThreadOne threadOne = new ThreadOne();
    ThreadTwo threadTwo = new ThreadTwo();

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new CommunicationC().run();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void run() {
        threadOne.start();
        threadTwo.start();
    }

    class ThreadOne extends Thread {
        @Override
        public void run() {
            for (char i : num) {
                if (flag) {
                    System.out.print(i);
                    flag = false;
                    LockSupport.unpark(threadTwo);
                    LockSupport.park();
                }
            }
        }

    }

    class ThreadTwo extends Thread {
        @Override
        public void run() {
            for (char i : chars) {
                LockSupport.park();
                if (!flag) {
                    System.out.print(i);
                    flag = true;
                    LockSupport.unpark(threadOne);
                }
            }
        }
    }
}

输出结果:

 

 

通过LockSupport的park和unpark来控制线程的通信,相对来说说更简单直观点,后续还有更有趣的方式也可以放上来,以此记录下。

以上是关于用多线程完成一个小题目(续)的主要内容,如果未能解决你的问题,请参考以下文章

用多线程实现线程安全的取款

一道面试题:用多线程求1000以内的素数有多少个?并给出消耗时间

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

Android多线程断点续传下载原理及实现

多线程下载文件(支持暂停取消断点续传)

为什么要用多线程