您的位置:首页 > 编程语言 > Java开发

Java-ThreadPool 线程池

2016-04-22 19:22 477 查看
线程池可分为四种:

1>.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收线程,则新建线程。

public static void main(String[] args) {

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

for (int i = 0; i < 10; i++) {

final int index = i;

try {

Thread.sleep(index * 1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

cachedThreadPool.execute(new Runnable() {

public void run() {

System.out.println(index);

}

});

}

}

2>.newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

public static void main(String[] args) {

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

for (int i = 0; i < 10; i++) {

final int index = i;

fixedThreadPool.execute(new Runnable() {

public void run() {

try {

System.out.println(index);

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

}

3>.newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。

/**

* 延迟3秒

*/

// scheduledThreadPool.schedule(new Runnable() {

//

// public void run() {

// // TODO Auto-generated method stub

// System.out.println("delay 3 seconds");

// }

// }, 3, TimeUnit.SECONDS);

/**

* 循环+延迟 延迟1秒后每3秒执行一次

*/

// scheduledThreadPool.scheduleAtFixedRate(new Runnable() {

//

// public void run() {

// // TODO Auto-generated method stub

// System.out

// .println("delay 1 seconds, and excute every 3 seconds");

// }

// }, 1, 3, TimeUnit.SECONDS);

/**

* 循环+延迟 延迟1秒后每3秒执行一次

*/

scheduledThreadPool.scheduleWithFixedDelay(new Runnable() {

public void run() {

// TODO Auto-generated method stub

System.out

.println("delay 1 seconds, and excute every 3 seconds");

}

}, 1, 2, TimeUnit.SECONDS);

}

4>.newSingleThreadExecutor:创建一个单线程化的线程池。

public static void main(String[] args) {

ExecutorService singleThreadExecutor = Executors

.newSingleThreadExecutor();

for (int i = 0; i < 10; i++) {

final int index = i;

singleThreadExecutor.execute(new Runnable() {

public void run() {

try {

System.out.println(index);

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: