我是Java新手。我试着写一个程序来检查数据库状态(是否重载)。
CODE:
package com.test.service;
import java.util.LinkedList;
import java.util.List;
public class PersonImpl {
public PersonService personService;
public void InsertPersonDetails(Person person) {
if(personService.isOverLoaded()) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
//pass control to dao
}
}
}
我将从boolean
获取isOverLoaded
。如果isOverLoaded
值为yes,那么我们应该停止将控制权传递给dao几秒钟,然后再次检查isOverLoaded
方法。
帮助将不胜感激:)
答案 0 :(得分:3)
我会选择ScheduledExecutorService。创建一个线程,只要isOverloaded()
返回true,就重新安排执行。
答案 1 :(得分:3)
您的代码看起来很好用。
if(personService.isOverLoaded())
{
try {
Thread.sleep(5000);
//Any other code to execute after 5 min execution pause.
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
//pass control to dao
}
Thread.sleep(5000)
暂停执行5秒钟并再次恢复。如果你在这个语句之后有任何代码,那么它将在5秒暂停后执行,如果不是,它将执行if / else完成后写的代码。
如果要继续检查数据库过载状态,则需要在每5秒后继续执行函数personService.isOverLoaded()
以检查数据库状态。
例如:
while(personService.isOverLoaded())
{
try {
Thread.sleep(5000);
//Any other code to execute after 5 min execution pause.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//pass control to dao
答案 2 :(得分:2)
您的代码看起来不错,应该可以使用。但您需要确保boolean
传递的personService.isOverLoaded()
值为volatile
。
Volatile
将确保您的处理线程不会缓存此boolean
标志的值。
private volatile boolean flag = false;
public void overLoaded(){
flag = true; // based on some condition
}
public boolean isOverLoaded(){
return flag; // Accessed in your thread
}
答案 3 :(得分:2)
作为替代方案,您可以使用java.util.concurrent.BlockingQueue来控制流。您可以在一个线程中启动dao作为队列的使用者。然后,您的InsertPersonDetails方法将从主线程推送到队列。
我是否还可以指出java中通常使用小写字母启动方法,因此您的方法将是
public void insertPersonDetails(Person person)