Open fred-ye opened 10 years ago
在编程世界中池通常是用来提前创建资源。如数据库连接池,会提前创建一些数据库连接。同理,线程池是提前创建线程,放到空闲队列中,然后对线程资源进行复用,减少频繁创建和销毁对象引起的资源消耗,提高系统的性能。
Jdk1.5
void execute(Runnable command)
ExecutorService
Executor
submit
shutdown
Executors类:相当于是一个工具类,提供了一些静态方法,生成一些常用的线程池。 两个常用的方法:
ExecutorService ex = Executors.newFixedThreadPool(2); ex.executor(thread1); ex.executor(thread2); ex.executor(thread3); //可以看到只有前两个线程执行完了,第三个线程才会执行。 newCachedThreadPool 创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者JVM)能够创建的最大线程大小。 newScheduledThreadPool 创建一个无固定大小的线程池,此线程池支持定时以及周期性执行任务的需求。
ExecutorService ex = Executors.newFixedThreadPool(2); ex.executor(thread1); ex.executor(thread2); ex.executor(thread3); //可以看到只有前两个线程执行完了,第三个线程才会执行。
在项目中有这么一个需求。我们的一个页面上有四个按钮,每点一个按钮便会发一次请求去Server端拿数据。如果用户快速的点击,那么就会起多个线程。但实际上最终显示在页面上的只会是最后一次请求所拿到的数据。因此我们可以采用这种思路去做,如果用户是快速不断的切换按钮,每次点击都起一个线程,我们将线程交给线程池来管理。那么对于尚未执行的线程,就将其从线程池中清除掉,以下就是示例代码:
singleThreadPool = Executor.newFixedThreadPool(1); ThreadPoolExecutor pool = (ThreadPoolExecutor)singleThreadPool; pool.getQueue().clear(); pool.execute(thread);
在编程世界中池通常是用来提前创建资源。如数据库连接池,会提前创建一些数据库连接。同理,线程池是提前创建线程,放到空闲队列中,然后对线程资源进行复用,减少频繁创建和销毁对象引起的资源消耗,提高系统的性能。
Jdk1.5
以上提供了线程池。 Executor是一个执行线程的工具, 只有一个方法void execute(Runnable command)
。 线程池接口是ExecutorService
. 继承自Executor
,提供了了管理和终止线程的方法。submit
,shutdown
等方法。可以跟踪一个或多个异步任务执行状况。Executors类:相当于是一个工具类,提供了一些静态方法,生成一些常用的线程池。 两个常用的方法:
在项目中有这么一个需求。我们的一个页面上有四个按钮,每点一个按钮便会发一次请求去Server端拿数据。如果用户快速的点击,那么就会起多个线程。但实际上最终显示在页面上的只会是最后一次请求所拿到的数据。因此我们可以采用这种思路去做,如果用户是快速不断的切换按钮,每次点击都起一个线程,我们将线程交给线程池来管理。那么对于尚未执行的线程,就将其从线程池中清除掉,以下就是示例代码: