一、线程池的创建
为什么要用线程池?
线程池是因为线程的生成关闭很浪费资源 所以不要频繁的操作 线程次 就是管理线程的地方 不用了它可以让它休眠也就是他替你管理线程 而且比你管理的要好的多。线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。其 好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过适当地调 整线程池中的线程数目,也就是当请求的数目超过某个阈值时,就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从而可以防止资源不足。
1.创建固定线程数量的线程池
Executors.newFixedThreadPool(线程池中的线程个数);
2.创建线程数可变的线程池
Executors.newCachedThreadPool();
3.创建单一线程的线程池
Executors.newSingleThreadExecutor();
4.创建延迟连接的线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadExecutor();
scheduledExecutorService .scheduled(new Runnable(){
syso("延迟一段时间执行");
},10,TimeUnit.Second);
scheduledExecutorService .scheduledAtFixDelay(new Runnable(){
syso("延迟10s时间执行,之后每隔2s的频率继续执行");
},10,2,TimeUnit.Second);
ScheduledExecutorService 类并没有提供在某一时间做某件事的方法 但可以这样写
scheduledExecutorService .scheduled(new Runnable(){
syso("延迟一段时间执行");
},事件发生的时间.getDate()-System.currentTimeMillis(),TimeUnit.MilliSeconds);