簡體   English   中英

在Java中同時運行兩個任務

[英]Running two tasks simultaneously in 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,但我知道Java Swing組件的EDT。 CMIIW

謝謝。

當您想與其他線程一起使用在特定線程中運行的對象時,線程安全只是一個問題。 這里不清楚您是否在這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完成同步塊,這可能會破壞代碼的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM