我正在系统中开发一个模块,其中基于某些事件用户必须接收短信。

我有以下情况

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()中的代码对此一无所知。

09-13 06:05