代码之家  ›  专栏  ›  技术社区  ›  Tyler Sebastian

使用ExecutorService或类似于按顺序完成的队列任务?

  •  1
  • Tyler Sebastian  · 技术社区  · 12 年前

    假设我有三个任务:从互联网下载.zip,解压缩文件,然后用解压缩的文件交换一个本地文件。我无法阻止主线程,因为服务器正在使用它,但我需要按顺序完成这三个任务。有没有一种方法可以使用ExecutorService或类似的东西来对这些任务进行排队,以便一个任务在另一个任务之后完成,而不会阻塞主线程?

    2 回复  |  直到 12 年前
        1
  •  3
  •   helderdarocha    12 年前

    您可以使用单个线程执行器。下面的服务将与主线程并行运行 e2 将依次运行。

    ExecutorService e1 = Executors.newSingleThreadExecutor();
    ExecutorService e2 = Executors.newSingleThreadExecutor();
    e1.execute( new ExpressTask() );
    e2.execute( new SequentialTask("Part-One"));
    e2.execute( new SequentialTask("Part-Two"));
    e2.execute( new SequentialTask("Part-Three"));
    e1.shutdown();
    e2.shutdown();
    
        2
  •  1
  •   Alexei Kaigorodov    12 年前

    只需运行一个线程:

    new Thread() {
        public void run() {
           task1.run();
           task2.run();
           task3.run();
        }
    }.start();