0
以下代碼應該發送短信至手機,並在操作成功時返回。如果操作在超過1分鐘內沒有成功,它應該中止操作並嘗試發送另一條消息。代碼在測試環境中運行良好,但是當它在生產環境中實現時,它似乎一直等到操作成功忽略60秒規則爲止。如果有人能夠發現代碼工作中的任何問題,我想請你告訴我。如果在1分鐘內沒有成功,則中止操作
public synchronized String sendSms(MessageData messageData) {
class Task implements Callable<String> {
private MessageData messageData;
public Task(MessageData messageData) {
this.messageData = messageData;
}
@Override
public String call() throws Exception {
System.out.println("Sending MPT >>> " + "Number : " + messageData.getToAddress() + ", Message : "
+ messageData.getMessage());
SendSMS.send(messageData.getToAddress(), messageData.getMessage(),
Long.toString(messageData.getSyskey()));
//The real code that sends the message
//***
return "1";
}
}
ExecutorService executor = Executors.newSingleThreadExecutor();
Task t = new Task(messageData);
Future<String> future = executor.submit(t);
try {
System.out.println("Started..");
future.get(60, TimeUnit.SECONDS);
executor.shutdown();
return "1";
} catch (TimeoutException e) {
future.cancel(true);
executor.shutdown();
return "-1";
} catch (InterruptedException e) {
executor.shutdown();
return "-1";
} catch (ExecutionException e) {
executor.shutdown();
return "-1";
}
}
猜測我必須對此進行消化;但一個直接的想法是:使用「-1」 「1」作爲返回值?真?嚴重:這很糟糕。 – GhostCat
你是說它掛在'future.get(60,TimeUnit.SECONDS)'? – shmosel
你有沒有試過調試過?如果是這樣,結果如何?例如,嘗試在調用Future.get(long,TimeUnit)之前和之後放置斷點,並確認(a)最後一個線程實際上到達print語句,並且(b)同一線程不會到達executor.shutdown()。 – Teto