一个java多线程实例
2015-01-13 08:37
375 查看
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(); } }
相关文章推荐
- JAVA多线程的一个实例
- java多线程很好的一个实例
- JAVA多线程的一个实例
- Java Tread多线程(0)一个简单的多线程实例
- 用一个实例介绍Java多线程
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- 关于动态生成WML文件的一个Java实例(2)
- 关于动态生成WML文件的一个Java实例(3)
- 一个使用多线程删除指定目录及子目录下所有指定文件的Java程序(源码)
- 一个简单的SWT程序实例及详解-Java基础-Java-编程开发
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- 多线程(6): Java Threads例子的一个问题
- java一个多线程的经典例子
- 让你的Java程序只有一个进程实例在运行
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
- 关于动态生成WML文件的一个Java实例(1)
- 有关于在Java 类的静态初始化块中创建一个自身实例的问题。
- Java中的接口与抽象类的比较、应用和实例 – 一个培训师不错的简洁解述