池的本质就是一种缓存技术,牺牲空间换取时间。
Java5新增了一个Executors工厂类来产生线程池,以下几个静态工厂方法创建线程池:
1、newCachedThreadPool():具有缓存功能的线程池。
2、newFixedThreadPool(int nThreads):创建一个可复用的、具有固定线程数的线程池。
3、newSingleThreadExecutor():只有单线程的线程池,相当于newFixedThreadPool传入1.
4、newScheduledThreadExecutor(int corePoolSize):具有指定线程数的线程池
5、newSingleThreadScheduledExecutor():创建只有一个线程的线程池,它可以在指定延迟后执行线程任务。
6、ExecutorService newWorkStealingPool(int parallelism):
7、ExecutorService newWorkStealingPool()
使用线程池来执行任务的步骤:
1、调用Executor类的静态工厂方法创建一个ExecutorService对象,该对象代表一个线程池;
2、创建Runnable实现类或Callable实现类的实例,作为线程执行任务;
3、调用ExecutorService对象的submit()方法来提交Runnable实例或Callable实例;
4、当不想提交任何任务时,调用ExecutorService对象的shutdown()方法来关闭线程池。
ThreadLocal类
从另一个角度来解决多线程的并发访问,将需要的并发访问的资源复制多份,每个线程拥有一份资源。
通常建议:如果多个线程之间需要共享资源,以达到线程之间的通信功能,就使用同步机制;如果仅仅需要隔离多个线程之间的共享冲突,则可以使用ThreadLocal。