当前位置: 代码迷 >> Java Web开发 >> 多线程有关问题:每个线程休息不同的时间,然后继续执行
  详细解决方案

多线程有关问题:每个线程休息不同的时间,然后继续执行

热度:9672   发布时间:2013-02-25 21:10:02.0
多线程问题:每个线程休息不同的时间,然后继续执行
需求:线程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();
  相关解决方案