package com.concurrent;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ExecutorsTest {
/**
* 老办法
* */
public static void test1() {
// 开20个线程
for (int i=0;i<20;i++) {
Runnable thread = new ExecutorsTest().new OneThread();
new Thread(thread).start();
}
}
public static void test2(){
// 创建一个固定数目线程的线程池
ExecutorService service = Executors.newFixedThreadPool(5);
// 同下
/*
ExecutorService service2 = new ThreadPoolExecutor
(5,Integer.MAX_VALUE,0,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
*/
// 始终是上面创建的5个线程的运行
for (int i=0;i<10;i++) {
Runnable thread = new ExecutorsTest().new OneThread();
service.execute(thread);
}
service.shutdown();
}
public static void test3() {
/**
* 创建一个可缓存的线程池,调用execute() 将重用以前构造的线程(可用线程);
* 如果现有线程没有可用的,则创建一个新的线程添加到线程池中;
* 终止并从缓存中移除哪些 60秒之后没有使用的线程
* */
//ExecutorService service = Executors.newCachedThreadPool();
/**
* 上面的60秒改成2秒
* */
ExecutorService service = new ThreadPoolExecutor
(0,Integer.MAX_VALUE,2,TimeUnit.SECONDS,new SynchronousQueue<Runnable>());
for (int i=0;i<20;i++) {
Runnable thread = new ExecutorsTest().new OneThread();
service.execute(thread);
try {
Thread.sleep(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
service.shutdown();
}
public static void test4() {
/**
* 创建一个单线程化得Executors
* */
ExecutorService service = Executors.newSingleThreadExecutor();
/*
ExecutorService service2 = new ThreadPoolExecutor
(1,1,0,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
*/
for (int i=0;i<10;i++) {
Runnable thread = new ExecutorsTest().new OneThread();
service.execute(thread);
}
service.shutdown();
}
public static void test5() {
/**
* 创建一个支持定时和周期性任务的Executors
* */
ExecutorService service = Executors.newScheduledThreadPool(5);
for (int i=0;i<20;i++) {
Runnable thread = new ExecutorsTest().new OneThread();
service.execute(thread);
}
service.shutdown();
}
public static void main(String[] args) {
test3();
}
public static void testScheduledExecutorService() {
final ScheduledExecutorService service = Executors.newScheduledThreadPool(5);
// initialDelay秒后开始执行,每隔period秒执行一次 period必须大于0
service.scheduleAtFixedRate(new Runnable(){
public void run() {
System.out.println(Thread.currentThread().getName()+" AtFix "+":"+new Date());
if (i > 5) {
Integer.parseInt("e");
//service.shutdown();
}
i++;
}
}, 0, 1, TimeUnit.SECONDS);
// initialDelay秒后开始执行,一次执行终止和下一次执行开始之间的延迟period秒
service.scheduleWithFixedDelay(new Runnable(){
public void run() {
System.out.println(Thread.currentThread().getName()+" withFix "+":"+new Date());
if (i > 10) {
service.shutdown();
}
i++;
}
}, 2, 3, TimeUnit.SECONDS);
try {
//Thread.sleep(20000);
//service.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 内部类
* */
public class OneThread implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName()+" : "+new Date().getTime());
}
}
}
分享到:
相关推荐
《并发编程全方位解析》 并发编程是现代计算机系统中不可或缺的一部分,尤其是在多核处理器和分布式系统环境下。本章将深入探讨Java并发编程的核心概念、工具和最佳实践。 1. **Java并发组件概述** - `Executor`...
Java并发包(`java.util.concurrent`)提供了许多工具类,如`ExecutorService`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Future`等,它们用于线程管理、同步控制、任务执行和结果获取,为并发编程提供了...
《JAVA并发编程实践》是一本深入探讨Java多线程编程技术的专业书籍,旨在帮助开发者理解和掌握在Java平台上进行高效并发编程的关键知识。本书涵盖了从基本概念到高级特性的全面内容,是Java程序员进阶的必读之作。 ...
《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...
Java提供了一套强大的并发工具,其中`java.util.concurrent.Executors`类是核心部分,它允许我们创建和管理线程池,极大地简化了并发编程。本篇将深入探讨`Executors`类的使用方法及其背后的并发原理。 `Executors`...
4. **并发工具类**:`java.util.concurrent`包还包含一系列并发工具类,如`ExecutorService`、`Future`、`Callable`等,它们简化了任务的提交、管理和结果获取,使并发编程更加灵活和高效。 5. **原子变量**:Java...
《Java 7并发编程手册》是一本面向Java开发者,尤其是初中级水平的程序员的重要参考资料。在多核处理器已经成为主流的今天,理解和掌握并发编程技术是每个Java开发者的必备技能。本书深入浅出地介绍了Java 7中的并发...
- **并发工具类的引入**:如`java.util.concurrent`包,提供了许多并发编程的新特性。 - **并发修改异常**:`ConcurrentModificationException`,在迭代器遍历集合时尝试修改集合引发的异常。 通过学习《Java并发...
如线程(Thread)、守护线程(Daemon Thread)、线程池(ExecutorService)、锁(synchronized关键字和Lock接口)、并发集合(Concurrent Collections)等,这些都为开发者提供了强大而灵活的并发编程支持。...
在Java并发编程中,任务执行是核心概念之一,它涉及到如何高效地管理和调度多个任务,以充分利用多核处理器的计算能力并提高程序的响应速度。任务可以视为一个可执行的工作单元,通常通过实现`Runnable`接口或者使用...
Java并发编程是Java开发中的重要领域,它涉及到多线程、同步机制、线程池以及并发集合等核心概念。在Java中,并发编程是提高系统性能和资源利用率的关键技术,尤其是在处理大量I/O操作或者计算密集型任务时。本文将...
《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威指南,它涵盖了Java 7版本中的并发工具和最佳实践。这本书的源码打包提供了丰富的实例,可以帮助读者更好地理解并应用书中所讲解的概念。这里我们将详细...
Java并发编程是Java开发中的重要领域,特别是在高并发、高性能的应用场景中不可或缺。并发编程能够有效地利用多核处理器资源,提高程序的运行效率,优化系统性能。以下将详细阐述Java并发编程的一些关键知识点。 ...
5. **并发编程模式**:可能封装了一些常见的并发编程模式,如发布/订阅、工作窃取等,简化了开发者的编码工作。 这个库的目标可能是简化Android开发中的并发编程,提供更高性能、更易于使用的工具,帮助开发者避免...
在Java编程语言中,"并发"是指多个线程同时执行任务,以提高程序的执行效率。Java并发包(java.util.concurrent)提供了丰富的类和接口,用于处理多线程环境下的同步、互斥以及线程间的协作。这个"concurrent-...
在`Concurrent-programming-master`这个压缩包中,可能包含了关于Java并发编程的示例代码、实战项目或者教程资料。学习这些内容可以帮助你深入理解如何在Java中编写高效的并发程序,包括如何避免线程安全问题,如何...
本套源码集合全面涵盖了Java并发编程的核心知识点,包括但不限于对象锁、Executors多任务线程框架以及线程池的实现。下面将对这些关键概念进行详细解释。 首先,我们来探讨对象锁。在Java中,锁是实现线程同步的一...