在java中,实现两个线程需求的建议方法是什么
- 我想要一个线程的名称
- 我希望父(或主)线程知道该子线程是否有任何异常。
对于 2,我 understand that拥有 future 的对象将是更好的方法。那么为了实现以上两个需求,下面是我想出的一段代码
class MyRunnable implements Runnable {
....
}
MyRunnable myRunnable = new MyRunnable ();
FutureTask futureTask = new FutureTask(myRunnable, null);
Thread myThread = new MyThread(futureTask, "processing-thread");
myThread.start();
try {
futureTask.get();
} catch (Exception e) {
throw new RuntimeException(e)
}
这似乎是很多简单东西的代码。还有更好的办法吗?
注意 - 使用 executorService 不是一个选项,因为我有不执行类似任务的线程。 executorService 还接受线程名称前缀而不是线程名称。我想给每个线程一个唯一的名称。
最佳答案
Using executorService is not an option since I have threads which are not doing similar tasks.
我不明白这有什么关系。
Also executorService accepts a thread name prefix instead of a thread name. I want to give each thread a unique name.
因此,为每个线程指定一个带有 ThreadFactory 的名称。我有一个类,我称之为 NamedThreadFactory。
我怀疑您希望线程执行的操作是反射(reflect)任务正在执行的操作。
你可以这样做
ExecutorService es = Executors.newSingleThreadExecutor();
es.submit(new Runnable() {
public void run() {
Thread.currentThread().setName("Working on task A");
try {
System.out.println("Running: "+Thread.currentThread());
} finally {
Thread.currentThread().setName("parked worker thread");
}
}
});
es.shutdown();
打印
Running: Thread[Working on task A,5,main]
顺便说一句,启动一个线程并立即等待它完成是没有意义的。您也可以使用当前线程。
关于java - 多线程 - 命名线程和处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932802/