Java四种线程池的使用
2015-01-05 18:33
627 查看
http://cuisuqiang.iteye.com/blog/2019372
http://www.cnblogs.com/riskyer/p/3263032.html http://blog.csdn.net/mazhimazh/article/details/19243889
Sun在java5中,对Java线程的类做了大量的扩展,其中线程池就是Java5的新特性之一,除了线程池外,还有很多线程相关的内容,为多线程的编程带来了恶极大的便利,为了编写高效稳定的多线程,线程部分的新增内容显得尤为重要,
线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了总舵(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象带来的性能开销,节省了系统的资源
在Java5之前,要实现一个线程池相当有难度,现在Java5为我们做好了一切,我们只需要按照提供的API来使用,就可享受线程池带来的极大便利。
Java5的线程池分为多种:固定尺寸的线程池、可变长度的连接处,。
Java通过Executors提供四种线程池,newCacheThreadPool(),newFixedThreadPool(),newScheduedThreadPool(),newSingleThreadPool()
newCacheThreadPool(), 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,如果线程池长度小于处理需求,则新建线程
newFixedThreadPool(),创建一个定长的线程池,可控制现场最大并发数,超出的线程会在线程队列中等待
ewScheduledThread()创建一个定长的线程池,支持定时,周期性的执行任务
newSingleThreadExecutor(),创建一个单线程化的线程池,它只会用唯一的工作线程类执行任务,保证所有任务按照指定顺序执行;
newCacheThreadPool
这种线程池在一下加入多个任务的时候,长度会变得很大,会一直新建线程,当没有任务时,空闲线程会被回收
newFixedThreadPool
这个线程固定长度,
newScheduledThreadPool
<span style="font-family:KaiTi_GB2312;font-size:12px;"> public static void main( String[] args ) {
ScheduledExecutorService executors = Executors.newScheduledThreadPool(5);
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
// executors.execute(mSleepTread);
//延迟多上时间执行,时间单位
executors.schedule(mSleepTread, 3, TimeUnit.SECONDS);
}
executors.shutdown();
}</span>
定时,或者循环执行的线程池,可定时,并不是execute执行,如果execute执行就没有效果延迟效果,对应还有两个方法,scheduleAtFixedRate(),和ScheduleWithFixedDelay(),第二个参数为任务执行完之后间隔下一个任务的停顿时间,第三个参数为最开始没执行任务时的等待时间
newSingleThreadExecutor
<span style="font-family:KaiTi_GB2312;font-size:12px;">public static void main( String[] args ) {
ExecutorService executors = Executors.newSingleThreadExecutor();
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
executors.execute(mSleepTread);
}
executors.shutdown();
}</span>单例模式的线程池,同事只有一个任务在执行.还有单例可延迟的线程池ScheduleExecutorService
<span style="font-family:KaiTi_GB2312;font-size:12px;"> public static void main( String[] args ) {
ScheduledExecutorService executors = Executors.newSingleThreadScheduledExecutor();
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
// executors.execute(mSleepTread);
executors.schedule(mSleepTread, 3, TimeUnit.SECONDS);
}
executors.shutdown();
}</span>
http://www.cnblogs.com/riskyer/p/3263032.html http://blog.csdn.net/mazhimazh/article/details/19243889
Sun在java5中,对Java线程的类做了大量的扩展,其中线程池就是Java5的新特性之一,除了线程池外,还有很多线程相关的内容,为多线程的编程带来了恶极大的便利,为了编写高效稳定的多线程,线程部分的新增内容显得尤为重要,
线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了总舵(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象带来的性能开销,节省了系统的资源
在Java5之前,要实现一个线程池相当有难度,现在Java5为我们做好了一切,我们只需要按照提供的API来使用,就可享受线程池带来的极大便利。
Java5的线程池分为多种:固定尺寸的线程池、可变长度的连接处,。
Java通过Executors提供四种线程池,newCacheThreadPool(),newFixedThreadPool(),newScheduedThreadPool(),newSingleThreadPool()
newCacheThreadPool(), 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,如果线程池长度小于处理需求,则新建线程
newFixedThreadPool(),创建一个定长的线程池,可控制现场最大并发数,超出的线程会在线程队列中等待
ewScheduledThread()创建一个定长的线程池,支持定时,周期性的执行任务
newSingleThreadExecutor(),创建一个单线程化的线程池,它只会用唯一的工作线程类执行任务,保证所有任务按照指定顺序执行;
newCacheThreadPool
<span style="font-family:KaiTi_GB2312;font-size:12px;">public class Main { public static void main( String[] args ) { ExecutorService executors = Executors.newCachedThreadPool(); SleepTread mSleepTread; for ( int i = 0 ; i < 30 ; i++ ) { mSleepTread = new SleepTread(); executors.execute(mSleepTread); } executors.shutdown(); } static class SleepTread extends Thread { @Override public void run() { super.run(); try { Thread.sleep(1500); } catch ( InterruptedException e ) { e.printStackTrace(); } System.out.println(this.getName() + " ----- "); } } }</span>
这种线程池在一下加入多个任务的时候,长度会变得很大,会一直新建线程,当没有任务时,空闲线程会被回收
newFixedThreadPool
<span style="font-family:KaiTi_GB2312;font-size:12px;">public static void main( String[] args ) { ExecutorService executors = Executors.newFixedThreadPool(3); SleepTread mSleepTread; for ( int i = 0 ; i < 30 ; i++ ) { mSleepTread = new SleepTread(); executors.execute(mSleepTread); } executors.shutdown(); }</span>
这个线程固定长度,
newScheduledThreadPool
<span style="font-family:KaiTi_GB2312;font-size:12px;"> public static void main( String[] args ) {
ScheduledExecutorService executors = Executors.newScheduledThreadPool(5);
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
// executors.execute(mSleepTread);
//延迟多上时间执行,时间单位
executors.schedule(mSleepTread, 3, TimeUnit.SECONDS);
}
executors.shutdown();
}</span>
定时,或者循环执行的线程池,可定时,并不是execute执行,如果execute执行就没有效果延迟效果,对应还有两个方法,scheduleAtFixedRate(),和ScheduleWithFixedDelay(),第二个参数为任务执行完之后间隔下一个任务的停顿时间,第三个参数为最开始没执行任务时的等待时间
newSingleThreadExecutor
<span style="font-family:KaiTi_GB2312;font-size:12px;">public static void main( String[] args ) {
ExecutorService executors = Executors.newSingleThreadExecutor();
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
executors.execute(mSleepTread);
}
executors.shutdown();
}</span>单例模式的线程池,同事只有一个任务在执行.还有单例可延迟的线程池ScheduleExecutorService
<span style="font-family:KaiTi_GB2312;font-size:12px;"> public static void main( String[] args ) {
ScheduledExecutorService executors = Executors.newSingleThreadScheduledExecutor();
SleepTread mSleepTread;
for ( int i = 0 ; i < 30 ; i++ ) {
mSleepTread = new SleepTread();
// executors.execute(mSleepTread);
executors.schedule(mSleepTread, 3, TimeUnit.SECONDS);
}
executors.shutdown();
}</span>
相关文章推荐
- Java四种线程池的使用
- Java线程 - 四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java中new Thread的弊端及Java四种线程池的使用
- Java四种线程池的使用
- Java中的线程创建,以及使用四种线程池对线程进行管理
- JAVA四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- new Thread的弊端及Java四种线程池的使用(下)
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java(Android)线程池,介绍new Thread的弊端及Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用