java 多线程经常卡死的问题。
public class b{
public Long a(Long next_time){}
public Long b(Long next_time){}
public Long c(Long next_time){}
public Long d(Long next_time){}
}
上面的B类中的a,b,c,d4个方法通过多线程方式同时执行。
public class Main implements Runnable {
public void run()
{
String method = Thread.currentThread().getName();
Long next_time = 30000L;
if(method.equals("a"))
{
while (true)
{
lottery b = new b();
next_time = b.a();
Thread.sleep(next_time);
}
} else if(method.equals("b"))
{
while (true)
{
lottery b = new b();
next_time = b.b();
Thread.sleep(next_time);
}
}else if(method.equals("c"))
{
while (true)
{
lottery b = new b();
next_time = b.c();
Thread.sleep(next_time);
}
}else if(method.equals("d"))
{
while (true)
{
lottery b = new b();
next_time = b.d();
Thread.sleep(next_time);
}
}
}
public static void main(String[] args) {
new Thread(new Main(),"a").start();
new Thread(new Main(),"b").start();
new Thread(new Main(),"c").start();
new Thread(new Main(),"d").start();
}
}
上面的代码比较简单。就是并发无限执行b类里面的4个方法。通过数据库日志发现经常执行B类里面的某一个方法到某一行代码以后就不会往下面执行代码了。要通过重启jar才可以。要怎么设置超时或者其他方法一直无限运行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最后可能是内存溢出了吧
看着这种if .. else .. 蛋疼
有可能是你的某个方法返回了较大的数值,所以一直在等待。
如果你想检查超时,可以另建一个线程,定时(按超时时间)去检查A-D线程的一个过得否执行完毕,如果未执行完毕,而且超过指定时间,则调用其
interrupt()
。示意代码(仅示意,可能有点拼写或者语法错误)