早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Java线程类问题写一个线程类MyThread,该线程实现了Runnable接口,写一个main方法,*用for循环创建3个线程对象。需求如下:*①利用线程类的构造函数输出:"创建线程3"。(备注:当创建

题目详情
Java 线程类问题
写一个线程类MyThread,该线程实现了Runnable接口,写一个main方法,
* 用for循环创建3个线程对象。需求如下:
*
① 利用线程类的构造函数输出:"创建线程3"。
(备注:当创建一个线程的时候,标记为1,再次创建一个线程的时候,标记为2,
所以输出的"创建线程3"就是创建的第三个线程)

② 在run方法中输出:“线程X :计数Y”,当执行次数达到6次的时候,退出。
(备注:其中“线程X”为第X个线程,“计数Y”为该线程的run方法执行了多少次)
第一部分我做出来了
但是第二部部分没一点思路
知道的请告诉在下思路 谢谢
▼优质解答
答案和解析
interrupt(), stop(), suspend() 都不推荐再用,而是应该让 run 方法正常地退出,如果你打算让它循环,就在 run() 方法内用一个循环(比如 while (indicator) 循环让它在标记位 indicator 改变后退出来)。
通过interrupt 对比那个线程是不是当前线程,这种做法很怪异,不是在 java 中用 == 就可以比较的么 thread == Thread.currentThread() 就是当前线程,再说了,怎么会是当前线程来决定当前线程的命运呢?管理线程应该和工作线程分开才合适。
现在这个代码是先尝优雅地退出,之后,强制退出,这说明作者不确信他写的代码能正常地退出,那么什么情况下不能正常地退出呢,如果是 socket 阻塞了,那我们给一个 timeout,如果是数据库阻塞了,我们允许强制退出,如果不是这种外界资源导致的阻塞,我们的程序就应该保证能正常地退出,否则就是质量问题。另外,interrupt 之后出现的异常完全不应该 e.printStackTrace() 因为你应该确信错误是什么,就直接打印出一段类似“线程未在指定时间内退出,强制终止它”的消息。
interrupt() 之后再 join() 看起来不适合,不过,可能只是为了保险起见。反正看不去哪里不确信。
如果你想等几个线程都完成之后你的主线程才继续,那么代码应该时先把工作线程都启动,全都启动之后再跑循环 workerThreadX.join() 把几个工作线程都调用一次 .join(),(注意先把所有线程启动,再来 join),那些工作线程应该自己根据标记位来退出,或者工作完成了后退出。