zoukankan      html  css  js  c++  java
  • 一个java多线程实例

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Queue;
    import java.util.LinkedList;
    public class Test3 {
        public static void main(String[] args) {
            final Manager3 m3 = new Manager3();
            m3.init();
            Thread t1 = new Thread(new Runnable() {
                public void run() {
                    while (true) {
                        if (m3.getter.q.size() > 0) {
                            TestData3 td = m3.getter.q.pop();
                            System.out.println(td.getName());
                        } else {
                            try {wait();} catch (Exception e) {}
                        }
                    }
                }
            });
            t1.start();
        }
    }
    class TestData3 {
        String type;
        String id;
        String name;
        TestData3(String type, String id, String name) {
            this.type = type;
            this.id = id;
            this.name = name;
        }
        String getName() {
            return name;
        }
    }
    class TestDataQueue3 {
        Queue<TestData3> q = new LinkedList<TestData3>();
        synchronized void push(TestData3 td) {
            q.offer(td);
        }
        synchronized TestData3 pop() {
            return q.poll();
        }
        long size() {
            return q.size();
        }
    }
    class Manager3 {
        Getter3 getter = new Getter3();
        Setter3 setter = new Setter3();
        Adapter3 adapter = Setter3.adapter;
        void init() {
            adapter.addGetter(getter);
            setter.regist();
            setter.putData();
            adapter.listenData();
        }
    }
    class Getter3 {
        TestDataQueue3 q = new TestDataQueue3();
        void update(TestData3 data) {
            q.push(data);
        }
    }
    class Adapter3 {
        TestDataQueue3 q = new TestDataQueue3();
        List<Getter3> glst = new ArrayList<Getter3>();
        List<Setter3> slst = new ArrayList<Setter3>();
        void addGetter(Getter3 g) {
            glst.add(g);
        }
        void addSetter(Setter3 s) {
            slst.add(s);
        }
        void listenData() {
            Thread t = new Thread(new Runnable() {
                public void run() {
                    while (true) {
                        if (q.size() > 0) {
                            broadcast(q.pop());
                        } else {
                            try {
                                wait();
                            } catch (Exception e) {}
                        }
                    }
                }
            });
            t.start();
        }
        void broadcast(TestData3 td) {
            for (int i = 0; i < glst.size(); i++) {
                glst.get(i).update(td);
            }
        }
    }
    class Setter3 {
        static final Adapter3 adapter = new Adapter3();
        void regist() {
            adapter.addSetter(this);
        }
        void putData() {
            Thread t = new Thread(new Runnable() {
                public void run() {
                    int i = 0;
                    while (true) {
                        TestData3 td = new TestData3("computer", "c" + String.format("%08d", i), "computer" + i);
                        adapter.q.push(td);
                        i++;
                        try {
                            Thread.sleep(1000);
                            notify();
                        } catch (Exception e) {}
                    }
                }
            });
            t.start();
        }
    }
  • 相关阅读:
    《需求分析与系统设计》阅读笔记(四)
    《需求分析与系统设计》阅读笔记(三)
    每周总结(补)【2020/11/22】——自主学习MyBatis与Hive配置
    每周总结【2020/11/08】——————图表联动
    每周总结【2020/11/1】——动态生成树形组件,MapReduce,C++实现文法分析
    “公文流转系统 v1.0”
    统计文本文件(字母、单词、字符)
    动手动脑 第三周(一)
    动手动脑 第三周 (二)
    回文字符串判断
  • 原文地址:https://www.cnblogs.com/feilv/p/4220361.html
Copyright © 2011-2022 走看看