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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨文宇 中级黑马   /  2012-8-4 18:58  /  1395 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test {
  2. public static void main(String[] args) {
  3. //第一种
  4. /*
  5. ScheduledExecutorService se = Executors.newScheduledThreadPool(1);
  6. se.scheduleAtFixedRate(new Runnable(){

  7. public void run() {
  8. System.out.println(1);
  9. }
  10. }, 1, 1, TimeUnit.SECONDS);
  11. */
  12. //第二种
  13. Executors.newSingleThreadExecutor().execute(new Runnable(){
  14. public void run() {
  15. while(true){
  16. try {
  17. Thread.sleep(1000);
  18. System.out.println(2);
  19. } catch (InterruptedException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. }
  24. }
  25. });
  26. }
  27. }
复制代码
这两种方法有什么区别?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

2 个回复

倒序浏览
newScheduledThreadPool(1)可以控制线程池里面的线程的数量,如果里面的线程因为失败而结束的话,系统会再创建一个新的线程来执行,还有一点比较重要的是,只有当任务的执行时间到来的时候,才会真正启动一个线程,其余时间都是在查询任务的状态

newSingleThreadExecutor(),从英文可以看出大概意思,“new一个单一的线程执行”,也就是说只有一个线程,而且是按顺序的往下执行任务,先提交的任务先执行,如果这个线程在执行的过程中出现问题或者异常,系统会再创建一个新的线程去执行后面的任务,以保证不会影响到后面任务的执行

我也是刚刚学到线程池,以上是我的了解,希望可以帮到你
回复 使用道具 举报
余明辉 发表于 2012-8-5 02:36
newScheduledThreadPool(1)可以控制线程池里面的线程的数量,如果里面的线程因为失败而结束的话,系统会再 ...

感谢!:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马