`

多个任务运行终止以及资源共享例子

阅读更多
场景:
公园的管理人员希望知道每天通过多个大门进入公园的总人数,这样为每个门设置一个计数器,总人数也就是各个计数器的和,代码如下所示:

计数器类
public class Count {
         private int count=0;
	private Random rand=new Random(47);
	
         public synchronized int increment(){
		int temp=count;
		if(rand.nextBoolean())
			Thread.yield();
		return (count=++temp);
	}
	
	public synchronized int value(){
		return count;
	}
	
	
}

=====================Entrance
public class Entrance implements Runnable{
	private static Count count=new Count();
	
	private static List<Entrance> entrances=new ArrayList<Entrance>();
	
	private int sum=0;
	
	private final int id;
	
	private static volatile boolean canceled=false;
	
	public static void cancel(){
		canceled=true;
	}
	
	
	public Entrance(int id) {
		// TODO Auto-generated constructor stub
		this.id=id;
		entrances.add(this);
	}
	
	
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(!canceled){
			synchronized(this){
				++sum;
			}
			
			System.out.println(this+" Total:"+count.increment());
			try {
				TimeUnit.MILLISECONDS.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("sleep interrupted...");
			}
			
			
		}
		
		System.out.println("Stopping:"+this);
	}
	
	
	public synchronized int getValue(){
		return sum;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Entrance "+id+":"+getValue();
	}
	
	
	public static int getTotalCount(){
		return count.value();
	}
	
	public static int sumEntrances(){
		int sum=0;
		for(Entrance entrance:entrances){
			sum+=entrance.getValue();
			
		}
		return sum;
	}
}

===========================公园管理人员查看这几个门的进入人数
public class Garden {

	public static void main(String[] args) throws InterruptedException{
		ExecutorService exec=Executors.newCachedThreadPool();
		for(int i=0;i<5;i++)  //这里面有5个入口
			exec.execute(new Entrance(i));//启动线程计数人数
		try {
			TimeUnit.SECONDS.sleep(4);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Entrance.cancel();//各个任务共享的变量终止
		exec.shutdown();
		if(!exec.awaitTermination(250,TimeUnit.MILLISECONDS ));
			System.out.println("some tasks was not terminated!");
			System.out.println("total:"+Entrance.getTotalCount());
			System.out.println("sum of entrances :"+Entrance.sumEntrances());
		
	}
}
分享到:
评论

相关推荐

    易语言借助乐玩图色脚本多线程例子

    而“鱼刺多线程模块”则是用于处理并发任务的一个组件,它帮助程序员在易语言环境中实现多线程功能,提高程序运行效率,特别是在需要执行大量计算或同时处理多个任务时。 多线程是现代计算机编程中的一个重要概念,...

    易语言多线程简单实用例子分享

    多线程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,而不是顺序地执行。在易语言中,通过创建和管理多个线程,我们可以实现后台计算、异步操作以及用户界面的流畅交互。这种方式尤其适合于处理大...

    什么是多用户多任务作系统.pdf

    多用户多任务操作系统是一种允许多个用户同时通过各自的终端设备共享一台计算机资源的操作系统。这种系统的核心特点是其分时技术,即计算机将CPU的时间划分为多个时间片,依次分配给各个用户任务,使得每个用户感觉...

    多线程例子 演示多线程使用

    1. **多线程概念**:在单核CPU中,多线程是通过时间片轮转的方式实现的,即操作系统快速切换线程的执行状态,给人一种同时运行多个任务的错觉。在多核CPU中,每个核心可以并行执行不同的线程,真正实现并发执行。多...

    一个多线程ping的例子

    多线程ping就是在同一时间启动多个ping任务,每个任务都在单独的线程上运行,这样可以显著加快检查多个IP地址的速度。 然而,"有错误 希望大家帮修改"的描述提示了这个代码可能存在的问题。多线程编程往往涉及到...

    vb.net多线程例子

    多线程允许程序同时执行多个任务,提高了程序的并行处理能力,减轻了UI线程的压力,使得用户界面能够保持流畅和响应。下面将详细解释多线程的基本原理以及如何在VB.NET中实现。 首先,我们需要理解什么是线程。线程...

    很不错的多线程的例子

    2. **线程同步**:为了防止多个线程同时访问共享资源导致数据不一致,我们需要同步线程。VC++提供了多种同步机制,如`Mutex`(互斥锁)、`Semaphore`(信号量)、`Critical Section`(临界区)和`Event`(事件)。...

    一个简单的多线程例子,启动线程与终止线程。

    总之,这个简单的多线程例子展示了创建、启动和停止线程的基本步骤。通过理解和实践这些概念,开发者可以更好地设计和优化多线程应用程序,以满足高并发环境的需求。在深入学习多线程时,还要关注线程安全、性能优化...

    基于win32的多线程实现例子

    多线程是指在一个进程中同时运行多个独立的执行线程。在Windows环境下,每个线程都有自己的调用堆栈和程序计数器,可以在不影响其他线程的情况下执行代码。多线程能够提高程序的并行处理能力,改善用户体验,尤其是...

    java多线程经典例子

    最后,线程的生命周期包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)七个状态。在这个例子中,主线程会检查子线程的状态...

    多线程UDP通讯例子

    在实际应用中,我们还需要考虑线程同步问题,比如使用互斥锁(mutex)防止多个线程同时访问共享资源,使用条件变量(condition variable)来协调线程间的等待和唤醒等。此外,为了保证程序的健壮性,异常处理和错误...

    VC 线程 创建 操作 同步 终止 UI线程等各种线程例子

    在IT行业中,线程是操作系统的基本执行单元,它允许程序并行执行多个任务。在Windows编程中,Visual C++(VC)提供了丰富的API来创建、操作、同步和管理线程,尤其是在开发多线程应用程序时。下面将详细介绍标题和...

    DELPHI 线程技术 例子

    线程同步是线程技术中非常关键的一部分,防止多个线程同时访问共享资源导致数据不一致。DELPHI提供了多种同步机制: - **Mutex(互斥量)**:只有一个线程可以拥有互斥量,其他线程必须等待拥有者释放后才能获取。...

    MFC多线程例子

    MFC多线程是MFC库中的一个重要特性,允许开发者在同一个应用程序中创建和管理多个执行线程,从而实现并发处理任务,提高程序效率。在Windows操作系统中,多线程技术广泛应用于UI更新、后台数据处理、异步操作等场景...

    多线程例子

    为了防止多个线程同时访问共享资源导致的数据不一致,Java提供了多种同步机制,包括`synchronized`关键字、`volatile`关键字、`Lock`接口(如`ReentrantLock`)以及`Atomic`类等。synchronized用于锁定代码块或方法...

    vc多线程的小例子

    在VC++编程环境中,多线程(Multithread)是一种技术,它允许程序同时执行多个独立的任务或子任务。在“vc多线程的小例子”中,我们可以探索如何在Microsoft Visual C++中创建和管理多线程应用程序。下面将详细讨论...

    C#线程带一个及多个参数实例

    在C#编程中,多线程是一个核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本实例将详细讲解如何在C#中创建线程并传递一个或多个参数,这对于理解和应用多线程技术至关重要。 首先,让我们...

    pb 最简单的多线程例子

    多线程是编程中的一个重要概念,允许程序同时执行多个独立的任务,提高应用程序的响应速度和效率。 在描述中提到的“multithread.pbl”是一个PowerBuilder库文件,它包含了多线程的例子代码。PBL(PowerBuilder ...

    采用VB编写的多线程实用例子

    在编程领域,多线程是一种重要的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。VB,即Visual Basic,虽然以其简洁的语法和面向对象的特性深受初学者喜爱,但许多人可能并不知道它同样支持多线程...

    VC多线程例子

    在VC++编程环境中,多线程技术是一种常用的方法,它允许多个任务同时执行,以提高程序的效率和响应性。本示例将探讨如何在Visual C++(VC)中创建和管理多线程,以及涉及到的相关知识点。 一、线程基础知识 线程是...

Global site tag (gtag.js) - Google Analytics