需求:线程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();