主线程在启动两个子线程后,进入死循环进行轮询操作,然后sleep了30秒。
现在问题是主线程有时会被永久阻塞,sleep时间到了,但是主线程没有任何的轮询输出了。
感觉是主线程sleep时间到时,子线程正在执行结果就发生以上情况。请教发生的原因和解决办法。

解决方案 »

  1.   

    在可能阻塞的代码段加上 synchronized作用域~
      

  2.   

    主线程在死循环下, 有两个操作, 1. sleep, 2.轮询sleep的操作是系统调度的, 不会出问题。 轮询去查询子线程, 这时候如果子线程没有返回结果, 主线程就会处于等待(阻塞)的状态。 所以, 要解决的是子线程查询的问题主线程的阻塞有俩种可能: 子线程这个时候没有运行完, 或者子线程被阻塞子线程运行完没有用个boolean在子线程末尾标记一下就可以了;子线程被阻塞? 问子线程吧。
      

  3.   

    轮询的时候就是调用一下子线程的isAlive方法检测子线程是否在运行,这个方法也会被阻塞?或者子线程阻塞时,该方法会被阻塞?
      

  4.   

    请教ls,如果用wait,那谁来notify呢,实现跟sleep相似的效果
      

  5.   

    你主线程用了wait,那么你子线程来notify。
    还有你的问题应该是子线程阻塞了,有可能出现死循环之类的问题,检查一下子线程的代码吧
      

  6.   

    那如果子线程本身是循环运行的,检测isAlive是要查看子线程会不会因为异常退出,并进行相关操作