日期:2014-05-17  浏览次数:20700 次

多线程问题:每个线程休息不同的时间,然后继续执行
需求:线程a每隔10秒执行一次,线程b每隔100秒执行一次,线程c每隔200秒执行一次.

出现的问题:通过日志观察,大部分时间内,代码是按我的期望运行的。但是,有时候,某个线程会出现非正常运行的情况:比如线程a一个小时都没有执行一次。这种情况出现的时机没有规律,有时十几个小时会出现一次,有时一个小时内会出现几次。

请教:如果想实现我的需求,该如何修改代码呢?多谢~

具体代码:
Java code

        Thread thread_a = new Thread(new Thread_a());
    Thread thread_b = new Thread(new Thread_b());
    Thread thread_c = new Thread(new Thread_c));
    thread_a.start();
    thread_b.start();
    thread_c.start();
public class Thread_a implements Runnable {
    public void run() {
        while (true) {
                .....//具体业务逻辑
            Thread.sleep(1000*10);
            }
    }
}
public class Thread_b implements Runnable {
    public void run() {
        while (true) {
             .....//具体业务逻辑
             Thread.sleep(1000*100);
          }
    }
}

public class Thread_c implements Runnable {
    public void run() {
        while (true) {
            .....//具体业务逻辑
            Thread.sleep(1000*200);
        }
    }
}


 

------解决方案--------------------
片段代码没啥问题,就看你是不是存在不合适的同步控制,导致你所说的现象。

或者日志记录存在错漏。
------解决方案--------------------
这段代码没问题,看看是不是你的其它代码有同步出现问题的。。
------解决方案--------------------
url.openStream(); 默认超时间是0,所以一直都不超时,网络有问题就会一直卡在那。

简单的处理,就调置一下超时时间好了:

Java code
URL url = new URL("http://www.baidu.com");
        
        URLConnection conn = url.openConnection();
        conn.setConnectTimeout(10);//连结超时,单位毫秒
        conn.setReadTimeout(10);//读超时
        conn.getInputStream();//获得流 = url.openStream();