gpt4 book ai didi

java - Android 线程实例化

转载 作者:行者123 更新时间:2023-12-01 11:39:26 24 4
gpt4 key购买 nike

有一个问题:在Android代码中,如果我声明了一个异步任务:

重要编辑:所有这些任务都通过执行器并行执行。我没有连续执行它们,在这种情况下,其中一些答案将是显而易见的。

AsynchronousTask task1 = new AsynchronousTask();
task1.execute();

我在该任务完成之前实例化了另一个任务:

task1 = new AsynchronousTask();

旧任务是否完成其工作,或者是否被垃圾回收拾取?

<小时/>

如果我创建了一个正在等待任务1完成的监听器:

FinishListener finishListener = new FinishListener()
{
//do stuff
}
AsynchronousTask task1 = new AsynchronousTask(finishListener);
task1.execute();

我以这种方式覆盖task1并执行它:

task1 = new AsynchronousTask(finishListener);
task1.execute()

监听器会在旧任务 1 完成还是新任务 1 完成时触发?

<小时/>

如果我重新实例化监听器,这会改变吗?

FinishListener finishListener = new FinishListener()
{
//do stuff
}
AsynchronousTask task1 = new AsynchronousTask(finishListener);
task1.execute();
finishListener = new FinishListener()
{
//do different stuff
}
task1 = new AsynchronousTask(finishListener);
task1.execute();

最佳答案

如果您调用execute,那么您就是串行执行它们,因为这就是Android 执行AsyncTasks 的方式。要并行执行它们,必须调用executeOnExecutor(AsycTask.THREAD_POOL_EXECUTOR,params);

但是要回答你的问题,如果你确实有并行执行:

1) 覆盖变量不会终止线程。它将继续在后台运行

2)两者都有。两个线程都传递给同一个监听器。首先发生的是竞争条件

3) 在这种情况下,当旧线程完成时将调用旧监听器,而当新线程完成时将调用新监听器。其中哪一个先发生是竞争条件。

关于java - Android 线程实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com