会计考友 发表于 2012-8-4 12:37:27

JAVA基础:Java线程池在使用中的问题实例解答

Java线程池需要我们不竭的进修,其实我们在使用的时辰仍是有不少问题需要我们解决。我们实现了一个简单的Java线程池。此刻我们就可以使用它了,下面的代码做了一个简单的示例:
  Java代码
  1.public class SimpleTaskTest extends Task {
  2.@Override
  3.public void deal() {
  4.// do something
  5.}
  6.public static void main(String[] args) throws InterruptedException {
  7.ThreadPoolService service = new ThreadPoolService();
  8.service.start();
  9.// 执行十次使命
  10.for (int i = 0; i < 10; i++) {
  11.service.runTask(new SimpleTaskTest());
  12.}
  13.// 睡眠1秒钟,期待所有使命执行完毕
  14.Thread.sleep(1000);
  15.service.stop();
  16.}
  17.}
  18.public class SimpleTaskTest extends Task {
  19.@Override
  20.public void deal() {
  21.// do something
  22.}
  23.public static void main(String[] args) throws InterruptedException {
  24.ThreadPoolService service = new ThreadPoolService();
  25.service.start();
  26.// 执行十次使命
  27.for (int i = 0; i < 10; i++) {
  28.service.runTask(new SimpleTaskTest());
  29.}

  30.// 睡眠1秒钟,期待所有使命执行完毕

会计考友 发表于 2012-8-4 12:37:28

JAVA基础:Java线程池在使用中的问题实例解答

</p>  31.Thread.sleep(1000);
  32.service.stop();
  33.}
  34.}
  当然,我们实现的是最简单的,这里只是为了演示Java线程池的实现事理。在现实应用中,按照情形的分歧,可以做良多优化。好比:
  调整使命队列的轨则,给使命设置优先级,级别高的使命优先执行。
  动态维护Java线程池,当待执行使命数目较多时,增添线程的数目,加速使命的执行速度;当使命较少时,收受接管一部门持久闲置的Java线程池,削减对系统资本的耗损。
  事实上Java5.0及以上版本已经为我们供给了线程池功能,无需再年夜头实现。这些类位于java.util.concurrent包中。
  Executors类供给了一组建树Java线程池对象的体例,常用的有一下几个:
  Java代码
  35.public static ExecutorService newCachedThreadPool() {
  36.// other code
  37.}
  38.public static ExecutorService newFixedThreadPool(int nThreads) {
  39.// other code
  40.}
  41.public static ExecutorService newSingleThreadExecutor() {
  42.// other code
  43.}
  44.public static ExecutorService newCachedThreadPool() {
  45.// other code
  46.}
  47.public static ExecutorService newFixedThreadPool(int nThreads) {
  48.// other code
  49.}
  50.public static ExecutorService newSingleThreadExecutor() {
  51.// other code
  52.}
  newCachedThreadPool()体例建树一个动态的线程池,其中线程的数目会按照现实需要来建树和收受接管,适合于执行年夜量短期使命的情形;newFixedThreadPool(int nThreads)体例建树一个包含固定数目线程对象的Java线程池,nThreads代表要建树的线程数,如不美观某个线程在运行的过程中因为异常而终止了,那么一个新的线程会被建树和启动来庖代它;而newSingleThreadExecutor()体例例只在线程池中建树一个线程,来执行所有的使命。
页: [1]
查看完整版本: JAVA基础:Java线程池在使用中的问题实例解答