在我们的J2EE项目中,我们依靠sjourdan/ffmpeg从我们的java代码中调用docker-java docker来进行一些视频转换。
目前,它看起来像这样(为简洁而简化):
CreateContainerCmd createCommand = dockerClient.createContainerCmd("sjourdan/ffmpeg")
.withVolumes(aVolume)
.withBinds(aBind)
.withCmd("a lot of options about the conversion itself, codec, ratio, …");
CreateContainerResponse container = createCommand.exec();
dockerClient.startContainerCmd(container.getId()).exec();
// vanilla implementation of ResultCallback
MyResultCallback callback = new MyResultCallback();
dockerClient.waitContainerCmd(container.getId()).exec(callback);
事实上,当然,线程一直在继续,而不等待回调回调。
我们该如何强制线程等到调用回调,告知我们docker命令是否完全结束?
另一方面,如果有人知道如何使用docker-java为播放的--rm
命令添加docker run
参数,我感兴趣。
答案 0 :(得分:1)
好吧,如果有人需要解决方案,那么我们在最后实施的是:
CountDownLatch latch = new CountDownLatch(1);
MyResultCallback callback = new MyResultCallback(latch);
dockerClient.waitContainerCmd(container.getId()).exec(callback);
return latch.await(5, TimeUnits.MINUTES);
,MyResultCallback.onComplete
看起来像
public void onComplete()
{
latch.countDown();
}
似乎有一个很好的方法来处理来自主线程的等待。