`
百合不是茶
  • 浏览: 354050 次
社区版块
存档分类
最新评论

多线程监听器事件模式(一个简单的例子)

阅读更多

   

多线程的事件监听器模式

  监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到

 

     创建多线程的事件监听器模式 思路:

   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此线程准备执行

........

 

       

    

0
0
分享到:
评论

相关推荐

    linux下多线程读写socket的简单例子

    在提供的压缩包文件"linux下多线程读写socket的简单例子.mht"中,应该包含了一个简单的示例代码,通过阅读和分析这个代码,你可以更好地理解和掌握这些知识点,并实践在自己的项目中。对于初学者来说,这是一个很好...

    arduino 多线程ProtoThreads.zip

    标题"arduino 多线程Protothreads.zip"揭示了这个压缩包是关于如何在Arduino平台上利用Protothreads库实现多线程编程的一个示例。Protothreads并非真正的多线程,而是模拟了线程的概念,通过状态机的方式实现了并发...

    spring事件的例子

    当你想要触发事件时,只需要创建一个事件实例并调用此方法即可。例如: ```java UserRegisteredEvent event = new UserRegisteredEvent(this, newUser); getApplicationContext().publishEvent(event); ``` 在这里...

    在聊天室中用监听器.rar

    5. **多线程处理**:为了确保聊天室的实时性,通常会使用多线程来处理事件,避免因为处理事件阻塞主线程,影响用户的交互体验。 6. **性能优化**:对于大型聊天室,监听器的性能优化至关重要,例如通过异步处理、...

    设计模式(包含5个设计模式)含源代码报告.rar

    在多线程环境中,单例模式能确保在任何时刻都只有一个实例存在,避免了资源的浪费和状态冲突。单例模式通常应用于日志记录、缓存管理和线程池等场景。 其次,工厂方法(Factory Method)模式是一种创建型设计模式,...

    事件经典例子

    当服务器有新数据发送时,它会触发一个事件,客户端通过监听这个事件来接收并处理数据。 在桌面应用中,例如用Java Swing或JavaFX构建的应用,事件处理同样重要。例如,我们可以为菜单项添加一个`ActionListener`,...

    《深入浅出Node.js》:Node异步编程解决方案之事件发布-订阅模式.docx

    以下是一个简单的事件发布-订阅模式的例子: ```javascript const events = require('events'); const emitter = new events.EventEmitter(); // 订阅名为'event1'的事件,当触发时执行同步回调 emitter.on('event...

    PureMVC简单例子

    随着对框架理解的加深,你可以尝试创建更复杂的例子,进一步探索PureMVC的高级特性和应用场景,如模块化、多线程支持等。记住,实践是学习的最佳途径,动手实践这个例子将有助于你更好地掌握PureMVC。

    构建者模式、回调和观察者设计模式

    下面将详细介绍这三个设计模式,并通过一个简单的例子来展示它们的应用。 首先,构建者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在构建者模式中,一个构建器类会一步一步地...

    JavaBean的事件

    接着定义了一个事件监听器接口`MouseMovedExampleListener`: ```java public interface MouseMovedExampleListener extends java.util.EventListener { void mouseMoved(MouseMovedExampleEvent mme); } ``` ...

    设计模式面试题

    - Struts框架就是一个典型的前端控制器模式的例子。 **9. 职责链模式是什么?** - 职责链模式允许多个处理对象有机会处理请求,直到其中一个对象处理它为止。 - 这种模式可以用来简化请求处理过程,降低发送者和...

    java里的自定义实现事件

    随后,创建一个事件监听器接口,比如`EventListener`,它实现事件接口中的方法来处理事件。这个接口可能需要与特定的事件接口一起使用,以便处理特定类型的事件。 ```java public interface EventListener { void...

    23种设计模式Demo

    在多线程环境下,正确实现单例需要考虑线程安全,防止多个线程同时创建实例。在Demo中,可能会展示如何通过双重检查锁定(Double-Checked Locking)或静态内部类方式实现单例。 2. **工厂模式(Factory)**:提供一...

    java源代码例子

    8. **多线程**:在图形界面设计中,可能需要用到多线程,确保界面的响应性。例如,长时间运行的操作应放在后台线程中执行,避免阻塞用户界面。 9. **Swing Timer**:Swing提供了一个定时器组件,可以定期触发事件,...

    Java-events-driver.rar_java Events_java 事件驱动_事件驱动 java

    当事件发生时,事件源会触发一个事件,并将该事件传递给已注册的监听器进行处理。监听器通过重写接口中的方法来定义事件发生时应执行的操作。 Java AWT(Abstract Window Toolkit)库和Swing库提供了丰富的GUI组件...

    事件分发_C#_事件分发_serious791_

    `EventSubscriber` 类订阅了这个事件,并提供了一个事件处理方法 `OnMyEvent`。当 `EventPublisher` 类的 `TriggerEvent` 方法被调用时,它会触发 `MyEvent`,进而调用所有已注册的事件处理程序。 在"demoTest"项目...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    15. **迭代器模式**:提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其底层表示。Java集合框架中的`Iterator`接口就是迭代器模式的体现。 16. **模版方法模式**:定义一个操作中的算法骨架,而将一些步骤...

    探索node之事件循环的实现

    在Node.js中,几乎所有的API都支持回调函数,当某个异步操作完成时,它会将回调函数放入一个事件队列中。事件循环会不断地检查这个队列,一旦发现有事件触发,就会调用对应的回调函数。这种设计模式被称为观察者模式...

    java 设计模式eclipse用法大全

    7. **观察者模式**: 观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Eclipse的事件监听机制即为此模式的应用。 8. **策略模式**: 策略模式定义...

    Java10道Java面试必备的设计模式面试题!.pdf

    面试官可能会要求实现一个简单的事件监听机制。 8. **策略模式**:定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。面试时可能会让你设计一个策略接口和几个实现策略的具体类,展示如何在运行时...

Global site tag (gtag.js) - Google Analytics