如何在此代码中的Runnable上设置id
Runnable rd = new Runnable() {
@Override
public void run() {
populatePanel(referList.get(handler.getPosition()), handler.getPosition());
if (i == referList.size() - 1) {
i = 0;
}
}
};
handler.postDelayed(rd, delay);
我想区分一个线程与其他
答案 0 :(得分:5)
您可以在线程上设置名称,而不是在Runnable上,例如使用以下命令:
RunnableJob runnableJob = new RunnableJob();
Thread thread1 = new Thread(runnableJob);
thread1.setName("thread1");
thread1.start();
Thread thread2 = new Thread(runnableJob, "thread2");
thread2.start();
Thread thread3 = new Thread(runnableJob);
thread3.start();
Thread currentThread = Thread.currentThread();
System.out.println("Main thread: " + currentThread.getName() + "(" +currentThread.getId() + ")");
这将打印以下内容:
RunnableJob is being run by thread1 (11)
RunnableJob is being run by thread2 (12)
Main thread: main(1)
RunnableJob is being run by Thread-1 (13)
来源here。
答案 1 :(得分:0)
区分线程的标准方法是为每个线程命名。请参阅java.util.concurrent包中的ExecutorService的ThreadFactory。
或者,如果您确实想要通过runnable区分业务案例,则需要实现自己的类并引用一些成员变量。
对我来说,使用ExecutorService的ThreadFactory是正确的。
答案 2 :(得分:0)
您正在创建一个匿名子类。在子类化方面,这里没有什么特别之处,即您可以轻松地向类中添加private final int ID = 42
字段,然后在run方法或toString
方法中使用该字段,例如。如果您需要添加公共API,则不能使用匿名类,但您可以使用内部类来实现另一个接口。
答案 3 :(得分:0)
使用实例ID创建内部类。
handler.postDelayed(new MyRunnable(1), delay);
handler.postDelayed(new MyRunnable(2), delay);
class MyRunnable implements Runnable{
long id;
public MyRunnable(long id){
this.id = id;
}
@Override
public void run() {
populatePanel(referList.get(handler.getPosition()), handler.getPosition());
if (i == referList.size() - 1) {
i = 0;
}
}
}