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

2021-05-01 10:27

阅读:536

标签:main   通过   load   void   com   over   输出   rri   rup   

接着上次的来讲,就是用两个线程,输出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 ) {
            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来控制线程的通信,相对来说说更简单直观点,后续还有更有趣的方式也可以放上来,以此记录下。

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

标签:main   通过   load   void   com   over   输出   rri   rup   

原文地址:https://www.cnblogs.com/xzshare/p/13220833.html


评论


亲,登录后才可以留言!