当前位置: 技术问答>java相关
在一个线程中的run()方法里面用无限循环的方式来检测某一个类中的变量的状态,当检测到该状态为true时,再判断该变量如果连续维持true状
来源: 互联网 发布时间:2015-10-08
本文导语: 在一个线程中的run()方法里面用无限循环的方式来检测某一个类中的变量的状态,当检测到该状态为true时,再判断该变量如果连续维持true状态的时间为30秒,则将该变量设为null! 用什么方法可以以较好的处理性能来...
在一个线程中的run()方法里面用无限循环的方式来检测某一个类中的变量的状态,当检测到该状态为true时,再判断该变量如果连续维持true状态的时间为30秒,则将该变量设为null! 用什么方法可以以较好的处理性能来解决这一问题?
因为如果在run()中用以下:
public void run(){
while(true){
if(xclass.getXState()){
//还不知怎样处理连接维持30秒?
xclass.setXNull();
}
}
}
这将占用了很大一部分cpu的处理时间,使到其他程序的执行明显放慢,如何改进可以提高处理性能?
因为如果在run()中用以下:
public void run(){
while(true){
if(xclass.getXState()){
//还不知怎样处理连接维持30秒?
xclass.setXNull();
}
}
}
这将占用了很大一部分cpu的处理时间,使到其他程序的执行明显放慢,如何改进可以提高处理性能?
|
inner class就是"类中类",是在Java 2中提出的新概念.例如,一个人体的inner class可以定义为如下形式:
public class Body{
class Head{
class Mouth{
//...
}
class Nose{
//...
}
class Eyes{
//...
}
//...
}
class Leg{
//...
}
//...
}
}
你提出的问题的解答(不完整):
Object S = new Object();
void methodThatMayChangeState()
{
//TODO: 改变状态
S.notify(); 解挂阻塞在信号量上的线程
//....
}
public void run()
{
do{
S.wait(); //该线程在这里挂起,由此不用再使用CPU,直到有其他
//S.notify()执行到
//TODO: 30秒内无等待则continue
}while(true);
//....
}
public class Body{
class Head{
class Mouth{
//...
}
class Nose{
//...
}
class Eyes{
//...
}
//...
}
class Leg{
//...
}
//...
}
}
你提出的问题的解答(不完整):
Object S = new Object();
void methodThatMayChangeState()
{
//TODO: 改变状态
S.notify(); 解挂阻塞在信号量上的线程
//....
}
public void run()
{
do{
S.wait(); //该线程在这里挂起,由此不用再使用CPU,直到有其他
//S.notify()执行到
//TODO: 30秒内无等待则continue
}while(true);
//....
}
|
定义这个变量为静态变量,然后每秒扫描一次,是否有程序调用修改静态变量的静态方法
|
public void run(){
//开始计时
long begintime = System.currentTimeMillis();
while(true){
if(xclass.getXState()){
//判断当前时间是否大于30秒
long usedTime = System.currentTimeMillis() - beginTime;
if (usedTime > 30000)
xclass.setXNull();
}
sleep(100);
}
}
//开始计时
long begintime = System.currentTimeMillis();
while(true){
if(xclass.getXState()){
//判断当前时间是否大于30秒
long usedTime = System.currentTimeMillis() - beginTime;
if (usedTime > 30000)
xclass.setXNull();
}
sleep(100);
}
}