多线程监听器事件模式(一个简单的例子)
编程技术  /  houtizong 发布于 3年前   83
多线程的事件监听器模式
监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到
创建多线程的事件监听器模式 思路:
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;}@Overridepublic void run() {flag = 2;while (true) {//System.out.println("正在统计" + path + "的第" + i + "个文件");i++;try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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;}@Overridepublic 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此线程准备执行
........
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接