`
zhchx0827
  • 浏览: 194152 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

并发(一)

 
阅读更多

原文链接:http://www.iteye.com/topic/366591

1:Executor类
子接口:ExecutorService,ScheduledExecutorService
执行已提交的Runnable任务对象。该接口将任务的提交和任务的运行相分离。通常使用该类而不是显示创建线程。

通常使用子接口ExecutorService来提交但返回值和不带返回值的任务,也可以执行关闭方法shutdown,拒接结束新的任务

2:Executors类

个人感觉主要使用该类返回的各种实力来创建线程

public class LiftOff implements Runnable{
	private int countDown = 10;
	private static int taskCount = 0;
	private final int id=taskCount++;
	
	public LiftOff() {}
	
	public LiftOff(int countDown) {
		this.countDown = countDown;
	}
	
	public static void main(String[] args) {
		new Thread(new LiftOff()).start();
	}
	@Override
	public void run() {
		while(countDown-- > 0) {
			System.out.println(status());
			Thread.yield();
		}
	}
	
	public String status() {
		return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + ").";
	}
} 

 

public class CachedThreadPool {
	public static void main(String[] args) {
		
		ExecutorService exe = Executors.newCachedThreadPool();
//		ExecutorService exe = Executors.newFixedThreadPool(5);
//		ExecutorService exe = Executors.newSingleThreadExecutor();
		for(int i=0;i<5;i++) {
			exe.execute(new LiftOff());
		}
		//防止新的任务提交给该Executor
		exe.shutdown();
		
		//抛出java.util.concurrent.RejectedExecutionException异常
		exe.execute(new LiftOff());
	}
}

 3:Callable接口

该接口包含一个call()方法,用来代替runnable接口,在完成任务时返回一个值

  4:Future接口

主要通过get()方法,来返回异步计算的结果

public class CallableDemo {
	public static void main(String[] args) {
		ExecutorService exe = Executors.newCachedThreadPool();
		ArrayList<Future<String>> results = new ArrayList<Future<String>>();
		
		for(int i=0;i<10;i++) {
			results.add(exe.submit(new TaskWithResult(i)));
		}
		
		for (Future<String> future : results) {
			try {
				//如果任务已完成,则返回 true。 可能由于正常终止、异常或取消而完成,
				//在所有这些情况中,此方法都将返回 true。
				if(future.isDone()) {
					System.out.println(future.get());
					//第一个参数:等待的时间     第二个参数:单位
					System.out.println(future.get(1, TimeUnit.SECONDS));
				}
				if(future.isCancelled()) {
					System.out.println("cancled.....");
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			} catch (TimeoutException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}


class TaskWithResult implements Callable<String> {
	private int id;
	public TaskWithResult(int id) {
		this.id=id;
	}

	public String call() throws Exception {
		return "result of TaskWithResult " + id;
	}
}

 

分享到:
评论

相关推荐

    怎样确定一个实际系统的并发用户数

    在项目的性能测试过程中,确定一个实际系统的并发用户数是非常重要的步骤。并发用户数是指在同一时间段内访问系统的用户数量,影响着系统的性能和稳定性。本文将详细介绍如何确定一个实际系统的并发用户数。 什么是...

    实践java高并发编程

    系统的讲解了java高并发的实现,建立高可用的应用程序。

    01-并发编程之深入理解JMM&并发三大特性(一).pdf

    并行是并发的一种特殊情况,或者说,并发是并行的一个更为广泛的术语。 并发编程中的三大特性:可见性、有序性和原子性,是多线程编程中主要的并发问题来源。这些特性是理解和规避并发编程中Bug的关键。 可见性...

    java并发编程实战源码,java并发编程实战pdf,Java

    《Java并发编程实战》是Java并发编程领域的一本经典著作,它深入浅出地介绍了如何在Java平台上进行高效的多线程编程。这本书的源码提供了丰富的示例,可以帮助读者更好地理解书中的理论知识并将其应用到实际项目中。...

    java并发编程2

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...

    一个C#高并发通讯组件

    本文将深入探讨一个由C#语言编写的高并发通讯组件,旨在为开发者提供一种有效处理大规模并发连接的解决方案。这个组件在作者的测试中,在普通计算机上实现了上万级别的并发性能,展示出其强大的性能潜力。 首先,...

    提高IIS的并发访问量,达到十万的并发

    步骤一:设置进程池 在 IIS 中,进程池是指应用程序池的队列长度,用于限制同时访问的用户数量。默认情况下,IIS 的进程池队列长度为 5000,显然不足以满足高并发的需求。为了提高 IIS 的并发访问量,需要将进程池...

    帆软7.0.4并发补丁

    【帆软7.0.4并发补丁】是一款针对帆软报表软件FineReport 7.0.4版本的优化工具,其主要目的是解决在多用户同时访问时可能出现的并发访问限制问题。在企业环境中,特别是在大数据量处理和高并发访问的情况下,系统的...

    java高并发编程第一版

    《Java高并发编程》第一版是一本专注于Java平台上的并发编程技术的专业书籍。在Java开发领域,高并发编程是至关重要的技能,特别是在大型分布式系统、云计算以及互联网应用中。本书旨在帮助开发者理解和掌握如何在...

    CsGo并发流程控制框架

    一、并发控制基础 并发控制是指在多任务或多线程环境下,如何协调和管理各个任务或线程的执行顺序和资源分配,以确保程序的正确性和高效性。在C#中,主要借助.NET Framework提供的线程类库实现并发控制,如Thread、...

    JAVA并发编程艺术pdf版

    《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...

    java并发之并发工具类

    Java 并发工具类是 Java 并发编程中的一种重要工具,用于协调线程之间的并发执行。 Java 并发工具类中有很多种,今天我们主要介绍四种:CyclicBarrier、CountDownLatch、Semaphore 和 Exchanger。 一、...

    java并发编程艺术

    并发编程是现代多核处理器环境下提升软件性能的关键手段,而Java语言提供了丰富的工具和API来支持这一领域。本书旨在帮助开发者理解和掌握如何在Java应用程序中有效地实现并行处理。 并发编程的核心概念包括线程、...

    .net高并发解决方案

    在.NET开发环境中,面对高并发问题,开发者需要采取一系列策略来优化系统性能,确保服务的稳定性和可扩展性。本示例将重点关注使用Entity Framework(EF)作为关系型数据库访问框架,以及RabbitMQ作为消息队列服务在...

    多线程并发技术

    在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...

    HTTP并发测试工具

    HTTP并发测试工具是一种专门用于在Windows操作系统上进行HTTP和HTTPS并发请求测试的应用程序。这个工具对于开发者、系统管理员以及性能测试人员来说非常实用,能够帮助他们评估和优化网络服务器的性能,确保在高并发...

    ORACLE最大并发数查询

    本文将基于给定文件的标题、描述、标签以及部分内容,深入探讨如何查询Oracle数据库的最大并发数,以及这一参数对系统性能的影响。 ### Oracle最大并发数查询 在企业级应用中,Oracle数据库因其强大的数据处理能力...

    Java 并发编程实战.pdf

    综合来看,该书不仅适合于对Java并发编程感兴趣的初学者,同样也适合有经验的开发者,作为一本参考资料和实践指南,读者可以通过它来加深对Java并发特性的理解和应用。书中丰富的案例分析和代码示例将有助于读者更...

    《java 并发编程实战高清PDF版》

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南。这本书旨在帮助开发者理解和掌握在Java环境中创建高效、可扩展且可靠的多线程应用程序的关键技术和实践。它涵盖了从基本概念到高级主题的广泛内容,...

Global site tag (gtag.js) - Google Analytics