更改一个变量同时运行两个任务

时间:2014-04-16 00:34:45

标签: java feed multitasking

我的问题与此问题here有关。我基本上想要同时完成两项任务:

  1. 从Feed中收集数据并将其添加到对象列表
  2. 阅读 对象列表,将其添加到数据库并删除添加到数据库的内容 来自对象列表
  3. 所以我正在更改这两个单独任务中的对象列表,我不知道如何共享它并让它可以同时运行的两个任务进行更改。 我想在两个不同的任务中执行此操作的原因是因为来自Feed的数据通常每5秒给出一次,这使我没有足够的时间来处理它并将其添加到数据库中。

    我希望有人可以提供帮助。谢谢。

    ----编辑

    我发现另一个问题似乎从here给了我需要的东西。所以目前我有一个像这样的代码:

    class MainThread {
        private void MainThread() {
            while(true)
           {
             //get json data
    
            List<Object> obj = //json data to list of object;        
    
            SecondThread second = new SecondThread(obj);
            second.start();
           }
    
        }
    }
    
    class SecondThread extends Thread {
        List<Object> obj;
    
        public void SecondThread(List<Object> obj) {
        this.obj = obj;
        }
        public void run() {
    
        //add list to db
    
        }
    }
    

    我想知道的是,MainThread中的while循环是否等待SecondThread在开始另一个循环之前完成处理/将数据放入db中?

1 个答案:

答案 0 :(得分:1)

由于您似乎找到了第一组问题的内容,我将回答您的上一个问题:

  

我想知道的是,MainThread中的while循环是否等待SecondThread在开始另一个循环之前完成处理/将数据放入db中?

在您的示例中MainThread永远不会等待SecondThread完成,它将继续执行其while循环。在你的代码中,你在while循环中创建SecondThread,这将在你的应用程序崩溃之前创建大量的线程。如果你想在做其他事情之前等待线程完成,那么你可以这样做:

SecondThread second = new SecondThread(obj);
second.start();
second.join(); //will make current thread wait until this thread finishes before proceeding

请注意,在您的情况下,线程连接基本上只会使您的代码顺序,因为SecondThread将阻止MainThread运行。