9.Java5线程并发库的应用

 1 import java.util.concurrent.ExecutorService;
 2 import java.util.concurrent.Executors;
 3 import java.util.concurrent.TimeUnit;
 4
 5 /**
 6  * java5线程并发库的应用
 7  * 线程池工具类 Executors
 8  *
 9  * @author LiTaiQing
10  *
11  */
12 public class ThreadPoolTest {
13
14     public static void main(String[] args) {
15         //固定大小的线程池
16         //ExecutorService threadPool = Executors.newFixedThreadPool(3);
17         //缓存线程池
18         //ExecutorService threadPool = Executors.newCachedThreadPool();
19         /**
20          * 单一线程池(如何实现线程死掉后重新启动)
21          *     此线程池的特点正好解决上述问题,如果线程挂掉,此线程池会自动创建一个线程代替挂掉的线程
22          */
23         ExecutorService threadPool = Executors.newSingleThreadExecutor();
24         for (int i = 1; i < 10; i++) {
25             final int task = i;
26             threadPool.execute(new Runnable() {
27                 @Override
28                 public void run() {
29                     for (int j = 0; j < 10; j++) {
30                         try {
31                             Thread.sleep(20);
32                         } catch (InterruptedException e) {
33                             e.printStackTrace();
34                         }
35                         System.out.println(Thread.currentThread().getName()
36                                 + " is looping of " + j
37                                 + " for task of " + task);
38                     }
39                 }
40             });
41         }
42         System.out.println("all of 10 tasks have committed!");
43         //当所有任务结束后关闭线程池
44         //threadPool.shutdown();
45         //不管所有任务是否都已结束,直接关闭线程池
46         //threadPool.shutdownNow();
47         //计时器
48 //        Executors.newScheduledThreadPool(3).schedule(new Runnable(){
49 //            @Override
50 //            public void run() {
51 //                System.out.println("bombing!");
52 //            }
53 //        },
54 //        6, //时间
55 //        TimeUnit.SECONDS);//单位
56
57         /**
58          * 固定频率
59          * 实现6秒以后炸,以后每2秒后爆炸一次
60          */
61         Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
62             @Override
63             public void run() {
64                 System.out.println("bombing!");
65             }
66         },
67         6, //时间
68         2, //时间间隔
69         TimeUnit.SECONDS);//单位
70     }
71
72
73 }
时间: 2024-08-04 07:57:07

9.Java5线程并发库的应用的相关文章

Java多线程与并发库高级应用-java5线程并发库

java5 中的线程并发库 主要在java.util.concurrent包中 还有 java.util.concurrent.atomic子包和java.util.concurrent.lock子包

JAVA多线程提高六:java5线程并发库的应用_线程池

前面我们对并发有了一定的认识,并且知道如何创建线程,创建线程主要依靠的是Thread 的类来完成的,那么有什么缺陷呢?如何解决? 一.对比new Threadnew Thread的弊端 a. 每次new Thread新建对象性能差. b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom. c. 缺乏更多功能,如定时执行.定期执行.线程中断.相比new Thread,Java提供的四种线程池的好处在于:a. 重用存在的线程,减少对象创建.消亡的开销,性能

线程高级应用-心得4-java5线程并发库介绍,及新技术案例分析

1.  java5线程并发库新知识介绍 2.线程并发库案例分析 1 package com.itcast.family; 2 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 import java.util.concurrent.TimeUnit; 6 7 public class ThreadPoolTest { 8 9 /** 10 * @param args

线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析

1.  HashSet与HashMap的联系与区别? 区别:前者是单列后者是双列,就是hashmap有键有值,hashset只有键: 联系:HashSet的底层就是HashMap,可以参考HashSet的类源码,默认构造方法为: public HashSet(){ map = new HashMap<key,Object> } 就是HashSet只用HashMap的键,而不用他的值,前者的值可以程序员随便指定,反正不用 2.  线程并发库中的集合优路劣之分 HashMap和HashSet如果在

Android多线程研究(7)——Java5中的线程并发库

从这一篇开始我们将看看Java 5之后给我们添加的新的对线程操作的API,首先看看api文档: java.util.concurrent包含许多线程安全.测试良好.高性能的并发构建块,我们先看看atomic包下的AtomicInteger. import java.util.concurrent.atomic.AtomicInteger; public class AtomicIntegerTest { private static AtomicInteger data = new Atomic

【java并发】线程并发库的使用

1. 线程池的概念 在java5之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念.假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配个客服去接待--如果第一个客服接待完了,我就让她接待下一个咨询者,这样我雇的这些客服可以循环利用.这些客服就好比不同的线程,那么装这些线程的容器就称为线程池. 2. Executors的

线程高级应用-心得5-java5线程并发库中Lock和Condition实现线程同步通讯

1.Lock相关知识介绍 好比我同时种了几块地的麦子,然后就等待收割.收割时,则是哪块先熟了,先收割哪块. 下面举一个面试题的例子来引出Lock缓存读写锁的案例,一个load()和get()方法返回值为空时的情况:load()的返回值是一个代理对象,而get()却是一个实实在在的对象:所以当返回对象为空是,get()返回null,load()返回一个异常对象:具体分析如下: 一个读写锁的缓存库案例:用上面那道面试题分析则很好理解: 线程阻塞问题:运用多个Condition对象解决 2. Lock

Java中的线程--并发库中的集合

线程中的知识点基本都已经学完了,看看Java5并发库中提供的集合... 一.可堵塞队列 队列包含固定长度的队列和不固定长度的队列 ArrayBlockQueue中只有put()方法和take()方法才具有阻塞功能 1.阻塞队列的功能和效果,代码如下: 1 import java.util.concurrent.ArrayBlockingQueue; 2 import java.util.concurrent.BlockingQueue; 3 4 /** 5 * @className: Block

Java多线程(四) —— 线程并发库之Atomic

一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下我们只是需要一个简单的.高效的.线程安全的递增递减方案.注意,这里有三个条件: 简单,意味着程序员尽可能少的操作底层或者实现起来要比较容易: 高效意味着耗用资源要少,程序处理速度要快: 线程安全也非常重要,这个在多线程下能保证数据的正确性. 这三个条件看起来比较简单,但是实现起来却难以令人满意. 通