我正在系统中开发一个模块,其中基于某些事件用户必须接收短信。
我有以下情况
synchronized(notificationPhoneNumber)
{
SmsProvider.sendSms(notificationPhoneNumber, smsText);
}
sendSms方法的代码正在异步运行:
public static void send(final NotificationPhoneNumber npn, final String smsText)
{
Thread smsSender = new Thread(new Runnable()
{
public void run()
{
//sms sending code runs here....
}
});
smsSender.start();
}
所以问题是在这种情况下,notificationPhoneNumber对象被锁定了多长时间?在线程完成其工作时是否将其锁定?
最佳答案
只要
SmsProvider.sendSms(notificationPhoneNumber, smsText);
不回来。这意味着,您的
sendsms()
方法将创建一个线程并返回。仅在那段时间里。另外,如果您在方法中启动线程。
sendsms()
返回后,创建的线程将仅保留引用,但不保留锁。锁定和同步在
sendsms()
外部。哪个线程调用sendsms()
将获取该锁,而sendsms()
中的代码对此一无所知。