多线程的事件监听器模式
监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到
创建多线程的事件监听器模式 思路:
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此线程准备执行
........