接连完整的Java启动一个后台线程(java start one background thread

2019-07-04 11:55发布

我看到了这样一个问题: 如何运行完整的另一个线程后一个线程 ,但它的答案是不适合我。

我有过类似的针对Android的Java代码:

public void startTask(Runnable r)
    {
        running = true;
        Log.i(tag, "-----------start.Runnable-----------");

        Thread first = new Thread(r);
        first.start();

        Thread second = new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                running = false;
            }
        });
}

第一个Thread需要为PARAM Runnable与我在后台服务正在处理一些难以操作的对象。 所以,当我打电话方法:startTask()我设置运行= TRUE; 以防止重复执行的任务。 但是,另外,我需要正确的第一线的完整性后,开始第二个线程设置运行=假; 使其他操作执行。

我怎样才能通过第二等第一线的完整性,不冻结主线程? 谢谢!

Answer 1:

试试这个:

final Thread first = new Thread(r);
first.start();

Thread second = new Thread(new Runnable() {

    @Override
    public void run() {
        first.join();
        // TODO Auto-generated method stub
        running = false;
    }
});
second.start();

我变了:

  • 添加最终keyworrd为“第一”
  • 通过在第二个线程的开始#join等待第一个线程的结束。
  • 即将开始sencond线程。


Answer 2:

您可以使用SingleThreadExecutor

Executor executor = Executors.newSingleThreadExecutor();
executor.execute(runnable1);
executor.execute(runnable2);


Answer 3:

我不是一个Android程序员,但这样的事情可能工作:

private volatile boolean running = false;

public void startTask(final Runnable r)
{
    running = true;
    Log.i(tag, "-----------start.Runnable-----------");

    Runnable runme = new Runnable() {
        @Override
        public void run() {
            try {
                r.run();
            } finally {
                running = false;
            }
        }
    };

    new Thread(runme).start();
}

只需要一个线程来运行的任务,然后清除running标志。 注意使用的volatile在声明running ,因为这个变量被读取并从多个线程写入。



文章来源: java start one background thread after another complete