Java 线程类问题
发布网友
发布时间:2022-04-22 12:38
我来回答
共1个回答
热心网友
时间:2023-06-22 15:50
interrupt(), stop(), suspend() 都不推荐再用,而是应该让 run 方法正常地退出,如果你打算让它循环,就在 run() 方法内用一个循环(比如 while (indicator) 循环让它在标记位 indicator 改变后退出来)。
通过interrupt 对比那个线程是不是当前线程,这种做法很怪异,不是在 java 中用 == 就可以比较的么 thread == Thread.currentThread() 就是当前线程,再说了,怎么会是当前线程来决定当前线程的命运呢?管理线程应该和工作线程分开才合适。
现在这个代码是先尝优雅地退出,之后,强制退出,这说明作者不确信他写的代码能正常地退出,那么什么情况下不能正常地退出呢,如果是 socket 阻塞了,那我们给一个 timeout,如果是数据库阻塞了,我们允许强制退出,如果不是这种外界资源导致的阻塞,我们的程序就应该保证能正常地退出,否则就是质量问题。另外,interrupt 之后出现的异常完全不应该 e.printStackTrace() 因为你应该确信错误是什么,就直接打印出一段类似“线程未在指定时间内退出,强制终止它”的消息。
interrupt() 之后再 join() 看起来不适合,不过,可能只是为了保险起见。反正看不去哪里不确信。
如果你想等几个线程都完成之后你的主线程才继续,那么代码应该时先把工作线程都启动,全都启动之后再跑循环 workerThreadX.join() 把几个工作线程都调用一次 .join(),(注意先把所有线程启动,再来 join),那些工作线程应该自己根据标记位来退出,或者工作完成了后退出。追问什么狗屁回答啊