在java中,有哪些建议的方法来实现两个线程要求
对于2,具有未来对象的I understand that将是更好的方法。因此,为了实现以下两个要求,我提出了一个代码
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接受线程名称前缀而不是线程名称。我想给每个帖子一个唯一的名字。
答案 0 :(得分:2)
使用executorService不是一个选项,因为我的线程没有执行类似的任务。
我不明白这是怎么回事。
此外,executorService接受线程名称前缀而不是线程名称。我想给每个帖子一个唯一的名字。
所以给每个线程一个带ThreadFactory的名字。我有一个类叫做NamedThreadFactory。
我怀疑你希望线程做的是反映任务正在做什么。
你可以这样做
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]
BTW没有必要启动一个线程并立即等待它完成。你也可以使用当前的线程。
答案 1 :(得分:0)
命名:
ThreadFactory myFactory = new ThreadFactory(){
@Override public Thread newThread( Runnable r ) {
return new Thread( r, getName() )
}
private int number = 0;
private String getName(){
return "MyThread_" + (number++);
}
}
还有其他方法。这是我最喜欢的人。
--- --- EDIT
为了给线程提供完全不同的名称,我会采取另一种方式:
一种可能性是在Runnable中设置名称:参见Peter的答案,只需添加一个:您可以在启动Thread之前初始化Runnable实现的成员变量而不是固定的String。