大大们,下面的是一个多线程优化的问题,怎么样才能解除第一个方法每一秒钟都要判断一次啊!
谢谢大大们呀!小弟急需哦!
public class TestRun implements Runnable {
boolean bl = true;
Thread readThread;
public void run() {
try {
while (bl) {
                       //第一个方法。
if(bl/* 这里不能判断时间大于一小时,因为效率不高,每一秒钟都要判断一次! */){
//这个是要每隔一小时运行一次!
int x = 0;
System.out.println("现在时间:" + x);
}
//第二个方法。
if (bl) {
//这个是要每隔一秒钟运行一次!
int y = 1;
System.out.println("现在的数:" + y);
}
Thread.sleep(1000);
//现在是每隔一秒钟,第二个方法要运行一次,但是第一个方法需要每隔一小时运行一次。
//能不能做成两个类,都重写run(),一个写sleep()一小时,一个一分钟,但是线程好像只能跑一个吧!怎么啊?
//分离方法的主要目的是优化代码,不让第一个方法每一秒钟都判断一次,这样效率很低!
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void startThread() {
if (bl) {
readThread = new Thread(this);
readThread.start();
}
}
public static void main(String[] args) {
TestRun tr = new TestRun();
tr.startThread();
}
}

解决方案 »

  1.   

    如果没有什么特殊要求,楼主去看看Java的JDK里面,有一个Timer类,应该能够完成楼主的要求。
    如果自己编写代码,应该采用一定的设计模式,一个类,不好搞定两件事情,而且,类似的事情,可能还会在添加进去。
      

  2.   

    我觉得是不是这样啊:
    仍然是一个线程的类,初始化出两个线程,根据传入不同的参数区分是否要检查第一个方法,而且,我觉得使用第一个方法的线程可以wait在第二个方法的线程上,让一直跑着的第二个方法检查前面的线程是否已经有一个小时了,不知道我说的你明白没有,呵呵
      

  3.   

    谢谢楼上的,wait等也是比较不错的方法!很实用!谢谢!
      

  4.   

    不过用wait方法的时候,还是需要判断一下是不是到了1小时没有,这个判断写到第二个方法中,还是没有优化!
    不过很是谢谢!
      

  5.   

    你把下面这段if (bl) { 
    //这个是要每隔一秒钟运行一次! 
    int y = 1; 
    System.out.println("现在的数:" + y); 

    Thread.sleep(1000); 写进for里面,让其循环3600次就行了.
      

  6.   

    ok
    dryZeng帅哥,你这个方法真棒,我试了一下!很不错!
    但是变态的就是我们组长非得要我帮项目中的这个类给分离开来!
    郁闷,分就分吧,但是run()中的一个方法还调用到了监听器,监听器写的还只能监听一个对象,第一个方法先得到,然后就放弃,第二个在得到,等到时间到了在remove掉,郁闷啊!!好麻烦啊啊!啊啊啊啊啊!
      

  7.   

    分成两个类就更简单啦
    不知是不是这样:类A
    if(bl/* 这里不能判断时间大于一小时,因为效率不高,每一秒钟都要判断一次! */){ 
    //这个是要每隔一小时运行一次! 
    int x = 0; 
    System.out.println("现在时间:" + x); 

    Thread.sleep(1000*3600); 类B
    if (bl) { 
    //这个是要每隔一秒钟运行一次! 
    int y = 1; 
    System.out.println("现在的数:" + y); 

    Thread.sleep(1000); 然后直接实例化A和BThread threada=new Thread(A); 
    Thread threadb=new Thread(B); 
    threada.start();
    threadb.start();
    它们的运行互不影响,而且时间也能控制.
      

  8.   

    嗯哼!thanks!这个就是我正在弄的工作!
    不过还是非常感谢!