[英]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.