Java线程:新特征-线程池.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。  有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程。目前有关这方面的资料和书籍都少之又少,大所属介绍线程方面书籍还停留在java5之前的知识层面上。  当然新特征对做多线程程序没有必须的关系,在java5之前通用可以写出很优秀的多线程程序。只是代价不一样而已。  线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。  在Java5之前,要实现一个线程池是相当有难度的,现在Java5为我们做好了一切,我们只需要按照提供的API来使用,即可享受线程池带来的极大便利。  Java5的线程池分好多种:固定尺寸的线程池、可变尺寸连接池、。  在使用线程池之前,必须知道如何去创建一个线程池,在Java5中,需要了解的是java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法,是必须掌握的。  一、固定大小的线程池  import java.util.concurrent.Executors;  import java.util.concurrent.ExecutorService;  /**  * Java线程:线程池-  *  * @author Administrator 2009-11-4 23:30:44  */  public class Test {  public static void main(String[] args) {  //创建一个可重用固定线程数的线程池  ExecutorService pool = Executors.newFixedThreadPool(2);  //创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口  Thread t1 = new MyThread();  Thread t2 = new MyThread();  Thread t3 = new MyThread();  Thread t4 = new MyThread();  Thread t5 = new MyThread();  //将线程放入池中进行执行  pool.execute(t1);  pool.execute(t2);  pool.execute(t3);  pool.execute(t4);  pool.execute(t5);  //关闭线程池  pool.shutdown();  }  }  class MyThread extends Thread{  @Override  public void run() {  System.out.println(Thread.currentThread().getName()+正在执行。。。);  }  }  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-2正在执行。。。  Process finished with exit code 0  二、单任务线程池  在上例的基础上改一行创建pool对象的代码为:  //创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。  ExecutorService pool = Executors.newSingleThreadExecutor();  输出结果为: pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  pool-1-thread-1正在执行。。。  Process finished with exit code 0  对于以上两种连接池,大小都是固定的,当要加入的池的线程(或者任务)超过池最大尺寸时候,则入此线程池需要排队等待。  一旦池中有线程完毕,则排队等待的某个线程会入池执行。  三、可变尺寸的线程池  与上面的类似,只是改动下pool的创建方式:  //创建一个可根

文档评论(0)

jsntrgzxy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档