A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sakuratossi 中级黑马   /  2014-9-6 11:07  /  841 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程并发库
线程池的通俗比喻:接待客户,为每个客户都安排一个工作人员,接待完成后该工作人员就废掉。服务器每收到一个客户请求就为其分配一个线程提供服务,服务结束后销毁线程,不断创建、销毁线程,影响性能。
线程池:先创建多个线程放在线程池中,当有任务需要执行时,从线程池中找一个空闲线程执行任务,任务完成后,并不销毁线程,而是返回线程池,等待新的任务安排。
线程池编程中,任务是提交给整个线程池的,并不是提交给某个具体的线程,而是由线程池从中挑选一个空闲线程来运行任务。一个线程同时只能执行一个任务,可以同时向一个线程池提交多个任务。

线程池创建方法:
ExecutorService threadPool = Executors.newFixedThreadPool(3);
ExecutorService threadPool = Executors.newCacheThreadPool();
ExecutorService threadPool = Executors.newSingleThreadExector();

往线程池中添加任务
threadPool.executor(Runnable)
关闭线程池:
threadPool.shutdown() 线程全部空闲,没有任务就关闭线程池
threadPool.shutdownNow()  不管任务有没有做完,都关掉
用线程池启动定时器:
延迟指定时间后执行任务
Executors.newScheduledThreadPool(线程数).schedule(Runnable, 延迟时间,时间单位);
延迟指定时间执行任务后,间隔指定时间循环执行
xecutors.newScheduledThreadPool(线程数). scheduleAtFixedRate (Runnable, 延迟时间,间隔时间,时间单位);
要安排在某个以后的 Date 运行,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马