如何在活动的特定线程上运行任务?

时间:2016-07-18 00:49:41

标签: java android multithreading swing

有没有办法可以执行类似的任务,例如android OS或java AWT线程,其中任务在特定线程上运行,而不管调用该方法的线程的哪个线程,例如重绘()。

private Thread thread;
  public void startThread(){ //method which start's my thread
    thread = new Thread(new Runnable(){
      doSomething();
    });
    thread.start()
  }

  public void submitTask(Runnable runnable){
    //run the runnable task on the thread "thread"
  }

在我有多个活动线程的情况下,如何实现这样的目标

1 个答案:

答案 0 :(得分:3)

我之前处理这个场景的方法是创建一个工作队列和一个处理添加到其中的任务的线程。因此,任何线程都可以将工作项添加到队列中,并且无论添加工作项的线程是什么,相同的线程都将处理它。

 public class MyClass {

    private LinkedBlockingQueue<MyTask> myTaskProcessingQueue;

    public MyClass() {
        myTaskProcessingQueue = new LinkedBlockingQueue<MyTask>();
        new MyTaskWorker().start();
    }

    public void processTask(MyTask myTask) {
        myTaskProcessingQueue.put(myTask);
    }

    private class MyTaskWorker extends Thread {

        @Override
        public void run() {
            while (true) {
                try {
                    processMyTask(myTaskProcessingQueue.take());
                } catch (InterruptedException ie) {
                    // handle it
                }
            }
        }

        private void processMyTask(MyTask myTask) {
            // do work
        }
    }
}