在Java中同时运行两个任务

时间:2013-07-18 14:16:02

标签: java multithreading swing

我有两个应该一起运行的任务。 将数据保存到数据库的第一项任务。录制视频的第二项任务。

目前我为每项任务使用一个Thread,并同时运行它。

...
Thread insertDb = new Thread(new Runnable() {
            @Override
            public void run() {
                // Insert to Database
                setDataMediaVisit(thumbStr);
                insertVisitRecord();
            }
        });

        Thread capture = new Thread(new Runnable() {
            @Override
            public void run() {
                if (getGraph().getState() == DSCapture.PREVIEW) {
                    getGraph().setCaptureFile("data/"+ CaptureController.getNoMr() +"/videos/"+videoStr, DSFilterInfo.filterInfoForProfile(new File("profiles/demo_profile800x570_WM8_VBR_100.prx")), DSFilterInfo.doNotRender(), true);
                    getGraph().record();
                }

                setData(CaptureController.getNoMr());
            }
        });

        insertDb.start();
        capture.start();
...

上面的代码线程是否安全? 我想使用EDT,但我知道EDT for Java Swing Component。 CMIIW

谢谢。

1 个答案:

答案 0 :(得分:1)

THread安全只是一个问题,你何时想要使用在另一个线程的特定线程中运行的对象。这里不清楚你是否正在使用这个2线程中的共享对象!但是,如果您想使用某个共享对象或者您想要从文件或特定黄油读取和写入,您可以使用这样的锁定对象:

final Object lock = new Object();

// In thread 1
// TODO: do some process in thread on

synchronized(lock) {
    // TODO: Put the result in somewhere that thread2 want to read it
}


// In thread 2
synchronized(lock) {
    // TODO: get the result from the place that you put in thread 1
}

// TODO: do some process on thread 2 on the data

你应该永远记住你需要把最小的可能同步,因为如果另一个线程到达同步部分,它将等到线程1完成同步块并且它可以杀死你的代码的性能