有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中同时运行两个任务的多线程

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

目前,我为每个任务使用一个线程,并同时运行它

...
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,但我知道JavaSwing组件的EDT。CMIIW

多谢各位


共 (1) 个答案

  1. # 1 楼答案

    线程安全只是一个问题,当您希望将在特定线程中运行的对象与另一个线程一起使用时。这里不清楚您是否在这个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完成同步块,这可能会破坏代码的性能