`
lihaibingqq789
  • 浏览: 19795 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

concurrent并发编程-Executors

阅读更多

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());
  }
 }
}

0
0
分享到:
评论

相关推荐

    concurrent-all-in-one.pdf

    《并发编程全方位解析》 并发编程是现代计算机系统中不可或缺的一部分,尤其是在多核处理器和分布式系统环境下。本章将深入探讨Java并发编程的核心概念、工具和最佳实践。 1. **Java并发组件概述** - `Executor`...

    java并发编程-超级大全整理

    Java并发包(`java.util.concurrent`)提供了许多工具类,如`ExecutorService`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Future`等,它们用于线程管理、同步控制、任务执行和结果获取,为并发编程提供了...

    JAVA并发编程实践-中文-高清-带书签-完整版

    《JAVA并发编程实践》是一本深入探讨Java多线程编程技术的专业书籍,旨在帮助开发者理解和掌握在Java平台上进行高效并发编程的关键知识。本书涵盖了从基本概念到高级特性的全面内容,是Java程序员进阶的必读之作。 ...

    JAVA并发编程艺术pdf版

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

    Java并发编程中使用Executors类创建和管理线程的

    Java提供了一套强大的并发工具,其中`java.util.concurrent.Executors`类是核心部分,它允许我们创建和管理线程池,极大地简化了并发编程。本篇将深入探讨`Executors`类的使用方法及其背后的并发原理。 `Executors`...

    (PDF带目录)《Java 并发编程实战》,java并发实战,并发

    4. **并发工具类**:`java.util.concurrent`包还包含一系列并发工具类,如`ExecutorService`、`Future`、`Callable`等,它们简化了任务的提交、管理和结果获取,使并发编程更加灵活和高效。 5. **原子变量**:Java...

    java 7 并发编程手册

    《Java 7并发编程手册》是一本面向Java开发者,尤其是初中级水平的程序员的重要参考资料。在多核处理器已经成为主流的今天,理解和掌握并发编程技术是每个Java开发者的必备技能。本书深入浅出地介绍了Java 7中的并发...

    Java并发编程的艺术.zip

    - **并发工具类的引入**:如`java.util.concurrent`包,提供了许多并发编程的新特性。 - **并发修改异常**:`ConcurrentModificationException`,在迭代器遍历集合时尝试修改集合引发的异常。 通过学习《Java并发...

    《Java 并发编程实战》.zip

    如线程(Thread)、守护线程(Daemon Thread)、线程池(ExecutorService)、锁(synchronized关键字和Lock接口)、并发集合(Concurrent Collections)等,这些都为开发者提供了强大而灵活的并发编程支持。...

    Java并发--任务执行.pdf

    在Java并发编程中,任务执行是核心概念之一,它涉及到如何高效地管理和调度多个任务,以充分利用多核处理器的计算能力并提高程序的响应速度。任务可以视为一个可执行的工作单元,通常通过实现`Runnable`接口或者使用...

    java并发编程分享

    Java并发编程是Java开发中的重要领域,它涉及到多线程、同步机制、线程池以及并发集合等核心概念。在Java中,并发编程是提高系统性能和资源利用率的关键技术,尤其是在处理大量I/O操作或者计算密集型任务时。本文将...

    java 7并发编程实战手册 源码

    《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威指南,它涵盖了Java 7版本中的并发工具和最佳实践。这本书的源码打包提供了丰富的实例,可以帮助读者更好地理解并应用书中所讲解的概念。这里我们将详细...

    JAVA多线程并发编程

    Java并发编程是Java开发中的重要领域,特别是在高并发、高性能的应用场景中不可或缺。并发编程能够有效地利用多核处理器资源,提高程序的运行效率,优化系统性能。以下将详细阐述Java并发编程的一些关键知识点。 ...

    Android-Java并发工具类库

    5. **并发编程模式**:可能封装了一些常见的并发编程模式,如发布/订阅、工作窃取等,简化了开发者的编码工作。 这个库的目标可能是简化Android开发中的并发编程,提供更高性能、更易于使用的工具,帮助开发者避免...

    concurrent-resource-test:Java并发包源码学习

    在Java编程语言中,"并发"是指多个线程同时执行任务,以提高程序的执行效率。Java并发包(java.util.concurrent)提供了丰富的类和接口,用于处理多线程环境下的同步、互斥以及线程间的协作。这个"concurrent-...

    Concurrent-programming:并发编程分配

    在`Concurrent-programming-master`这个压缩包中,可能包含了关于Java并发编程的示例代码、实战项目或者教程资料。学习这些内容可以帮助你深入理解如何在Java中编写高效的并发程序,包括如何避免线程安全问题,如何...

    Java并发编程全套源码

    本套源码集合全面涵盖了Java并发编程的核心知识点,包括但不限于对象锁、Executors多任务线程框架以及线程池的实现。下面将对这些关键概念进行详细解释。 首先,我们来探讨对象锁。在Java中,锁是实现线程同步的一...

Global site tag (gtag.js) - Google Analytics