Cra*_*aig 0 java scheduling date dead-code
while(true){
try
{
if(Calendar.DATE == X){
startTask();
}
long delay = timeUntilNextCheck();
Thread.sleep(delay);
}
catch (Throwable t)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个程序,需要在一个月的特定日期运行特定任务.在任务运行之后(或者如果它不是那天),线程会一直睡到明天它将再次检查.
但是,我收到了死代码警告,因为部分代码仅在该月的特定日期运行.
我已经阅读了这个警告是什么,我发现在某些情况下编译器不会编译死代码.所以我的问题是,这总是会被编译吗?
你能告诉我们什么X是?
if(Calendar.DATE == X)
Run Code Online (Sandbox Code Playgroud)
如果X某个常量代表一个月中的某一天,那么这将不起作用,因为您将Calendar.DATE 常量与另一个常量进行比较X.让我猜,你的代码是这样的:
if(Calendar.DATE == 17) //run on 17th of every month
Run Code Online (Sandbox Code Playgroud)
这意味着:
if(5 == 17) //I see dead code
Run Code Online (Sandbox Code Playgroud)
编译器会给你一个提示,即永远不会满足这个条件(并且可能不会编译if语句体).
相反,你应该测试:
if(new GregorianCalendar().get(Calendar.DATE) == 17)
Run Code Online (Sandbox Code Playgroud)
或者甚至更好地使用Quartz.您会惊讶地发现,使用如此简单的代码可以犯很多错误(想想:服务器时区,夏令时......)
但是,我收到了死代码警告,因为部分代码仅在该月的特定日期运行.
不,你得到一个死代码becase的警告startTask();将永远不会运行.Calendar.DATE是类的内部索引常量,Calendar值为5.要获取当月的当前日期,请使用以下代码:Calendar.getInstance().get(Calendar.DAY_OF_MONTH)