我对我的应用程序中的许多控制器/ servlet中使用的两种方法有两个问题:
1 - 在util类中调用静态方法或非静态方法(如处理日期的方法,即获取当前时间,在时区之间进行转换)之间的区别是什么,哪个更好? 2 - 直接在控制器中调用方法(包含太多逻辑,如发送电子邮件)或在不同的线程中运行此方法有什么区别?
答案 0 :(得分:3)
1)
2)
答案 1 :(得分:0)
1:因此static
关键字只会告诉您该方法的可访问性。如果方法是static
,则可以在不实例化对象的情况下访问它。因此,问哪个更好是没有意义的:静态或非静态。
2:在单独的线程上调用具有一些耗时逻辑的方法允许主线程继续处理其他重要的事情。因此,如果您需要为客户端执行两个耗时的任务,那么在单独的线程上运行这两个任务可以更快地完成工作。
请注意,所有这一切都假设程序员知道如何正确执行线程...如果线程未正确完成,那么可能会出现一系列问题:死锁,无效的对象状态,性能下降等等。
答案 2 :(得分:0)
使用静态方法有优点和缺点:
优点:
缺点:
根据我的个人经验,静态方法非常适合不要求您在调用之间保持状态的事物。就像格式化日期一样。
话虽如此,时间操作非常简单。 获取当前时间非常简单:
Date currentDate = new Date();
或
Calendar currentCal = Calendar.getInstance();
如果你知道时区之间的差异,日历也可以用于roll
Calendar.HOUR_OF_DAY
(如有必要,还可以Calendar.MINUTE
)。
答案 3 :(得分:0)
#1似乎在其他回复中得到了很好的回答。
#2取决于具体情况。如果控制器必须等待另一个线程完成发送电子邮件任务之前它可以继续,那么根本没有速度改进 - 实际上会有速度丢失< / em>由于上下文切换和同步。如果控制器可以为另一个请求提供服务,或者如果它可以与电子邮件发送线程并行执行其他操作,则可以获得收益。
通常,如果控制器需要发送电子邮件,它会将作业关闭到工作线程,然后继续并行处理并处理下一个请求。这样更快,但这意味着如果电子邮件发送失败,则无法向呼叫者报告问题。