多线程的事件监听器模式
监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到
创建多线程的事件监听器模式 思路:
1, 创建线程并启动,在创建线程的位置设置一个标记
2,创建队列保存线程
3,遍历队列中的线程 ,并得到标记
下面有一个简单的例子:
package com.iteye.com; /** * 创建线程统计类 * * @author Administrator * */ public class ThreadMain extends Thread { String path; int flag = 1; int i = 0; public ThreadMain(String path) { this.path = path; } @Override public void run() { flag = 2; while (true) { //System.out.println("正在统计" + path + "的第" + i + "个文件"); i++; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } flag = 3; } } }
package com.iteye.com; import java.util.ArrayList; public class Main { public static void main(String[] args) { ThreadMain m1 = new ThreadMain("m1"); ThreadMain m2 = new ThreadMain("m2"); ThreadMain m3 = new ThreadMain("m3"); m1.start();m2.start();m3.start(); ArrayList<ThreadMain> list = new ArrayList<ThreadMain>(); list.add(m1); list.add(m2); list.add(m3); MainLisetener mlis = new MainLisetener(list); mlis.start(); } }
package com.iteye.com; import java.awt.List; import java.util.ArrayList; import Thread0627.threadDemo; /** * 创建线程 * @author Administrator * */ public class MainLisetener extends Thread { ArrayList<ThreadMain> list; public MainLisetener(ArrayList<ThreadMain> list) { this.list = list; } @Override public void run() { while(true){ for(int i = 0;i<list.size();i++){ ThreadMain mn = list.get(i); if(mn.flag == 1){ System.out.println(Thread.currentThread().getName()+"线程还没执行"); } if(mn.flag==2){ System.out.println(Thread.currentThread().getName()+"此线程准备执行"); } if(mn.flag==3){ System.out.println(Thread.currentThread().getName()+"此线程已经执行完毕"); } } } } }
运行结果:
正在统计m2的第0个文件
正在统计m1的第0个文件
正在统计m3的第0个文件
正在统计m2的第1个文件
Thread-3此线程准备执行
Thread-3此线程已经执行完毕
Thread-3此线程准备执行
........