• 用多线程完成一个小题目(多线程通信)


    看到一个简单的题目,就是用两个线程,输出1a2b3c4d5e ...

    首先,两个线程去跑其中一个数据,顺序是随机的,不可能这么一次交替生成,故需要线程直接通信,告诉对方,你跑完了就该我了,

    确定之后,就想到了最基础的,synchronized,notify和wait来实现,话不多说,上代码

    public class CommunicationB {
    
        static char[] num = {'1', '2', '3', '4', '5', '6'};
        static char[] chars = {'a', 'b', 'c', 'd', 'e'};
    
        Object shareObject = new Object();
        Boolean first = true;
    
    
        public void run() {
            new ThreadOne().start();
            new ThreadTwo().start();
        }
    
        public static void main(String[] args) {
            new CommunicationB().run();
        }
    
        class ThreadOne extends Thread {
            @Override
            public void run() {
                synchronized (shareObject) {
                    for (char i : num) {
                        System.out.print(i);
                        shareObject.notify();
                        if (first) {
                            first = false;
                            try {
                                shareObject.wait();
                            } catch (Exception e) {
                                System.out.println(e);
                            }
                        }
                    }
              shareObject.notifyAll(); } } }
    class ThreadTwo extends Thread { @Override public void run() { synchronized (shareObject) { for (char i : chars) { System.out.print(i); shareObject.notify(); if (!first) { first = true; try { shareObject.wait(); } catch (Exception e) { System.out.println(e); } } } }
           shareObject.notifyAll();  } } }

    整体来说,实现很简单,就是锁的获取和等待来控制哪个线程运行,网上还有更多其他的实现方式,后续在继续研究

  • 相关阅读:
    LeetCode 17. Letter Combinations of a Phone Number (电话号码的字母组合)
    Mordern Effective C++ --auto
    modern effective C++ -- Deducint Types
    基于锁的并发数据结构
    C++ 内存模型
    zlib 简单封装
    assert 实现分析
    Valgrind 快速入门
    kmp算法理解与记录
    make 要点简记
  • 原文地址:https://www.cnblogs.com/xzshare/p/13209204.html
Copyright © 2020-2023  润新知