tonglin0325的个人主页

Java多线程——Executors和线程池

线程池的概念与Executors类的应用

**  1.创建固定大小的线程池**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package java_thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadPoolTest {

/**
* @param args
*/
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(3);
// ExecutorService threadPool = Executors.newCachedThreadPool();
// ExecutorService threadPool = Executors.newSingleThreadExecutor();
for(int i=1;i<=10;i++){
final int task = i;
threadPool.execute(new Runnable(){
@Override
public void run() {
for(int j=1;j<=4;j++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for task of " + task);
}
}
});
}
System.out.println("all of 10 tasks have committed! ");
//threadPool.shutdownNow();

// Executors.newScheduledThreadPool(3).scheduleAtFixedRate(
// new Runnable(){
// @Override
// public void run() {
// System.out.println("bombing!");
//
// }},
// 6,
// 2,
// TimeUnit.SECONDS);
}

}

**  2.创建缓存线程池**

1
2
ExecutorService threadPool = Executors.newCachedThreadPool();

** 3.创建单一线程池**

1
2
ExecutorService threadPool = Executors.newSingleThreadExecutor();

 

 

**关闭线程池 **

  shutdown与shutdownNow的比较

1
2
threadPool.shutdownNow();

 

**用线程池启动定时器 **

  调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务。

  支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。

1
2
3
4
5
6
7
8
9
10
11
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(	//多久气候执行,每隔多久执行
new Runnable(){
@Override
public void run() {
System.out.println("bombing!");

}},
6,
2,
TimeUnit.SECONDS);