在Runnable上设置id

时间:2013-07-08 09:26:08

标签: java android multithreading

如何在此代码中的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);

我想区分一个线程与其他

4 个答案:

答案 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;  
        }  
    }

}