【发布时间】:2021-04-06 23:28:09
【问题描述】:
我连续 2 天以来一直在尝试,并且已经就相关问题提出了许多 SO 问题和答案。
上下文:
- Runnable 类从另一个服务类获得多个调用。
- Runnable 类必须在重新启动之前完成已经运行和同步的方法
从服务调用 Runnable 线程:
final Singular_Processor singularProcessor = new Singular_Processor(this);
singularProcessor.start();
synchronized(singularProcessor.context)
{
while(singularProcessor.needWait)
{
wait();
}
}
实际可运行线程类:
class Singular_Processor extends Thread
{
private static final String TAG = "Singular_Processor";
final Context context;
boolean needWait = false;
Singular_Processor(Context context)
{
this.context = context;
}
@Override
public void run()
{
try
{
doNotDisturbMe();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void doNotDisturbMe()
{
synchronized (context)
{
try
{
needWait = true;
Log.d(TAG, "RUNNING THE THREAD ID : " + Thread.currentThread().getId() + ".. \n");
Thread.sleep(10000);
Log.d(TAG, "COMPLETED THE THREAD ID : " + Thread.currentThread().getId() + ".. \n");
}
catch (Exception e)
{
e.printStackTrace();
Log.d(TAG, "EXCEPTION THE THREAD ID : " + Thread.currentThread().getId() + ".. \n");
}
finally
{
needWait = false;
context.notifyAll();
}
}
}
}
预期输出:
2020-12-30 17:55:46.519 30184-30398/ D/Singular_Processor: RUNNING THE THREAD ID : 6053..
2020-12-30 17:55:50.474 30184-30455/ D/Singular_Processor: COMPLETED THE THREAD ID : 6053..
2020-12-30 17:55:56.520 30184-30398/ D/Singular_Processor: RUNNING THE THREAD ID : 6056..
2020-12-30 17:56:00.475 30184-30455/ D/Singular_Processor: COMPLETED THE THREAD ID : 6056..
什么是电流输出:
2020-12-30 17:55:46.519 D/Singular_Processor: RUNNING THE THREAD ID : 6053..
2020-12-30 17:55:50.474 D/Singular_Processor: RUNNING THE THREAD ID : 6056..
2020-12-30 17:55:56.520 D/Singular_Processor: COMPLETED THE THREAD ID : 6053..
2020-12-30 17:56:00.475 D/Singular_Processor: COMPLETED THE THREAD ID : 6056..
是否有任何错误:
一点也不,因为所有的语法都是正确的。为什么android不能等待几秒钟才能完成线程类上下文的完全锁定对象上已经运行和同步的方法,这让我很担心。我希望我能在这里得到一些想法。谢谢大家。
【问题讨论】:
标签: java android multithreading thread-safety runnable