技术开发 频道

java线程学习总结

  4.线程池

  创建一个线程也是需要一定代价的,为了降低这个代价,采用了和普通对象池的思想建立线程池,以供系统使用。

  线程消耗包括内存和其它系统资源在内的大量资源。除了 Thread 对象所需的内存之外,每个线程都需要两个可能很大的执行调用堆栈。除此以外,JVM 可能会为每个 Java 线程创建一个本机线程,这些本机线程将消耗额外的系统资源。最后,虽然线程之间切换的调度开销很小,但如果有很多线程,环境切换也可能严重地影响程序的性能。

  使用线程池的方式是,先建立对象池,然后申请使用线程,程序线程运行,运行完毕,把线程返回线程池。

  使用线程池的风险:同步错误和死锁,与池有关的死锁、资源不足和线程泄漏。

  大家有空可以研究一下tomcat的线程池实现原理思想。

  实际上是tomcat已经在从线程池的使用线程时候加上了事件处理机制。

  个人认为,线程池之类的实现,一般不要自己实现,因为自己实现主要是稳定性等方面可能作的不够好。

  可以参考 apache的jakarta-tomcat-5.5.6的相关代码,具体是:

  jakarta-tomcat-connectors\util\java\org\apache\tomcat\util\threads的相关代码

  5工作队列

  使用工作队列的好处是不象直接使用线程池那样,当线城池中没有线程可以使用的时

  候,使用者需要处于等待状态,不能进行其他任务的处理。

  工作队列的工作原理是:

  采用后台线程处理方式,客户端把任务提交给工作队列,工作队列有一组内部可以工作线程,这些工作线程从工作队列中取出任务运行,一个任务完成后,就从队列获取下一个任务进行处理。当工作队列中没有任务可以处理时候,工作线程就处于等待状态,直到获得新的任务时候,才进行新的处理。

0
相关文章