线程池为线程生命周期开销问题和系统资源不足问题提供了解决方案。线程池中预先创建了一些工作线程,它们不断从工作队列中取出任务,然后执行该任务。当工作线程执行完一个任务时,就会继续执行工作队列中的下一个任务。线程池具有以下优点:
减少了创建和销毁线程的次数,每个工作线程都可以一直被重用,能执行多个任务。
可以根据系统的承载能力,方便地调整线程池中线程的数目,防止因为消耗过量系统资源而导致系统崩溃。  我这里有个不理解的地方。。 比如我设定线程池的个数为2 那么我加入了 10个线程进去。。
   我的理解是 这个线程池控制了 并行运行的个数。。 最多只有2个线程并行运行。。 但是我10个线程加入进去 。。 
  没有理解的是 10个线程加入进去了 不是 声明10个线程 和撤销10个线程所有的资源吗?  
  如果是这样的话 对资源的消耗 我觉得和直接写10个线程没有多大区别。。
  但是我知道这样理解是不对的。。
  希望大家教育我下。。 改怎么理解 线程池中 设定的个数 和我加入进去后事怎么样运行的?
  谢谢

解决方案 »

  1.   

    线程是用来驱动任务的在java中任务就是Runnable中的run方法。如果你以个线程池可以产生2个线程,当你把10个任务交给他的时候,就会出现排队现象。
    你可以看看Executor的SingleThreadExecutor和FixThreadPool的执行应该会更清楚。
      

  2.   

    这里有一个关键的概念,你提交给线程池的东西,只是一个 java object instance 而已,并不是真正“系统意义上的线程”。线程池中的那 2 个才是“系统意义上的线程”,它们负责“执行”你那些 java object instance 所携带的“代码”。■□■□■□■□■□■□■□■
    □             □
    ■  忍以明志 勤以致远  ■
    □             □
    ■□■□■□■□■□■□■□■
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)