`
01jiangwei01
  • 浏览: 540889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程 -同时让10个线程执行一项工作。

 
阅读更多
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 要求实现10个线程同时执行,并通知比赛结束
 * 使用到的类有:
 * 	1:CountDownLatch,如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件
 * 		1.1	countDown方法,计数器减1
 * 		1.2	await方法,阻塞当前线程,直到计数器为0
 * 		1.3 await(long timeout, TimeUnit unit),等待指定时长后立刻开始执行任务
 *  2:ExecutorService,线程池
 *  
 *  实现方式:
 *  	1:使用两个同步所,一个用来通知比赛开始,一个用来通知比赛结束。获取比赛结束才可以开始后续工作。
 * 
 * @author admin
 *
 */
public class SameTimeMoreThreads {
	
	public static final int threadCount = 10;
	
	public static void main(String[] args) {
		
		/**
		 * 线程池
		 */ 
		ExecutorService exe = Executors.newFixedThreadPool(threadCount);
		/**
		 * 口令枪
		 * 当口令枪起,比赛开始
		 */
		 final CountDownLatch matchGun = new CountDownLatch(1);
		 
		 /**
		  * 比赛者完成比赛用来通知的枪
		  */
		 final CountDownLatch endGun = new CountDownLatch(threadCount);
		 
		 for(int i=0;i<threadCount;i++){
			 Worker worker = new Worker(i+1,matchGun,endGun);
			 exe.execute(worker);            //分配线程
		 }
		 /**
		  * 比赛枪响起
		  */
		 matchGun.countDown();
         try{
        	 /**
        	  * 等待,直到最后一个队员完成比赛。
        	  */
        	 endGun.await();           
         }catch (InterruptedException e) {
             e.printStackTrace();
         }finally{
             System.out.println("比赛结束!");
         }
         /**
          * 关闭线程池。
          */
         exe.shutdown();
		 
	}
	/**
	 * 内部类,具体执行者
	 *
	 */
	static class Worker implements Runnable {
		/**
		 * 比赛队员牌号
		 */
		private int id;
		/**
		 * 比赛抢
		 */
	     private CountDownLatch begin;
	     /**
	      * 完成比赛通知枪
	      */
	    private CountDownLatch end;
		 
	    public Worker(int i, CountDownLatch begin, CountDownLatch end) {
	         super();
	         this.id = i;
	         this.begin = begin;
	         this.end = end;
	     }
	    
		public void run() {
			 try{
				 /**
				  * 等待比赛枪响起
				  */
	             begin.await(); 
	             /**
	              * 如果枪响,则开始进入比赛
	              */
	             Thread.sleep((long)(Math.random()*100));    //随机分配时间,即运动员完成时间
	             System.out.println("队员["+id+"]完成比赛.");
	         }catch (InterruptedException e) {
	             e.printStackTrace();
	         }finally{
	        	 /**
	        	  * 通知仲裁,完成该队员完成比赛
	        	  */
	             end.countDown();    //使end状态减1,最终减至0
	         }
			
		} 
		
	}
}

 

 

分享到:
评论

相关推荐

    易语言多线程传递多参数

    总之,易语言多线程传递多参数是一项关键的编程技能,它涉及到线程的创建、管理和参数传递。理解并掌握这些知识,能够帮助开发者编写出更高效、更稳定的程序。对于易语言的学习者来说,研究这个源码将是一个宝贵的...

    OC-多线程-上下文切换

    在iOS开发中,多线程是一项关键的技术,用于提高应用程序的响应速度和用户体验。当我们谈论“OC-多线程-上下文切换”时,我们实际上是在讨论Objective-C中多线程环境下的一个核心概念。上下文切换是操作系统调度线程...

    多线程编程10例

    多线程编程是一项强大的技术,可以帮助开发者构建高性能的应用程序。通过理解和掌握Win32 API中的多线程相关函数,开发者可以有效地管理线程的生命周期,并实现高效的并发处理。在实践中,需要注意线程安全性和资源...

    workquere工作队列 多线程

    在多线程环境中,MSMQ可以作为一个可靠的消息传递机制,将工作项持久化到队列中,确保即使在系统故障后也能恢复未完成的任务。 7. **异常处理**:在多线程环境下,必须考虑到异常处理,以防止未捕获的异常导致整个...

    多线程同时查询同一数据库对比

    在IT行业中,多线程编程是一项重要的技术,它允许程序同时执行多个任务,极大地提高了效率。在本示例中,我们将探讨"多线程同时查询同一数据库对比"的主题,这通常涉及到并发访问数据库以提高数据处理速度。在这个...

    进程与线程--小练习

    一个进程内的多个线程可以并发执行,共同完成一项任务,从而提高了程序的执行效率。但是,线程间的资源共享也带来了数据安全问题,需要正确管理同步以避免竞态条件和其他并发问题。 在"进程与线程--小练习"这个主题...

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    delphi多线程批量下载

    在IT行业中,多线程技术是一项关键的编程概念,它允许程序同时执行多个任务,显著提高了效率和响应性。在Delphi这样的集成开发环境中,利用多线程进行批量下载是常见的应用场景,尤其对于处理大量数据或者大文件下载...

    易语言多线程操作

    多线程是指在一个程序中同时运行多个独立的执行线程。在易语言中,可以创建并管理这些线程来实现并发执行。下面将详细解释多线程的基本概念以及如何在易语言中使用多线程。 1. **线程概念**: - 主线程:每个程序...

    RabbitMQ实战-多线程-springboot-rabbit.zip

    通过这个项目,你将学习如何在Spring Boot中集成RabbitMQ,使用多线程来提高消息处理效率,并理解如何设计和实现一个健壮的、高并发的消息处理系统。同时,这也会帮助你掌握如何在分布式环境中解决异步通信和数据...

    Java多线程-线程间的通信

    在多线程环境中,不同的线程可能需要协同工作来完成一项任务。例如,一个线程负责生产数据,另一个线程负责消费这些数据。为了确保数据的一致性和程序的正确执行,线程之间需要有一种有效的通信机制。 **举例说明**...

    C++多线程SOCKET收发

    在C++编程中,多线程SOCKET收发是一项重要的技术,它允许程序同时处理多个网络连接,提高系统的并发性能。下面将详细讲解这个主题,包括C++中的多线程概念、SOCKET基础以及如何结合两者实现数据的收发。 首先,让...

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。这个场景通常涉及到性能优化和资源管理,以确保系统稳定性和数据一致性。下面将详细阐述多线程导入Excel数据的核心知识点。...

    VC中多线程10个详细例程

    多线程编程是指在一个进程中创建多个线程,每个线程都是进程内部的一个执行单元。主执行线程是进程内部的第一个线程,由系统自动创建。用户可以根据需要创建其他线程,多个线程并发地运行于同一个进程中。 多线程...

    易语言多线程访问网页

    在易语言中,多线程技术是一项重要的特性,它允许程序同时执行多个任务,提高了程序的执行效率。本主题将深入探讨如何使用易语言实现多线程访问网页的功能。 在多线程访问网页的场景中,通常涉及到以下几个关键知识...

    操作系统实验-----MFC线程--购票系统演示

    最后,调试多线程程序是一项挑战。MFC提供了一些调试工具,如Visual Studio的线程窗口,可以帮助开发者观察和跟踪各个线程的状态,定位并发问题。 综上所述,"MFC线程--购票系统演示"实验涵盖了MFC的线程创建、线程...

    VB6 多线程案例,测试可用。

    在VB6(Visual Basic 6)中实现多线程是一项技术挑战,但通过VBMThread10Demo这个示例,我们可以深入理解如何有效地利用多线程来提高程序的执行效率。多线程允许一个应用程序同时执行多个任务,这对于处理耗时操作如...

    WHUT-java多线程实验-第三周-文件上传和下载.zip

    总的来说,这个实验将教会你如何在Java多线程环境中实现高效、稳定的文件上传和下载功能,这是一项对任何开发人员来说都非常实用的技能,尤其是在构建高性能的Web应用或后台服务时。通过实践和理解这些概念,你将...

    java核心基础之多线程-毕向东.doc

    在Java编程中,多线程是一项核心基础,它允许程序同时执行多个任务,提高了应用程序的效率和响应速度。本文将深入探讨Java中的多线程概念,以及如何在自定义代码中创建线程。 首先,理解进程和线程的基本概念至关...

Global site tag (gtag.js) - Google Analytics