Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确保库调用按调用顺序执行_Java_Multithreading_Locking_Mutex_Imagej - Fatal编程技术网

Java 如何确保库调用按调用顺序执行

Java 如何确保库调用按调用顺序执行,java,multithreading,locking,mutex,imagej,Java,Multithreading,Locking,Mutex,Imagej,WindowManager是ij包[ImageJ的java API]中定义的一个类,这里调用的两个方法都是WindowManager类中的静态方法,我的程序只在一个线程中编写 上面的代码在打印“a”“a”和“a”“b”之间有所不同。我在这里的假设是WindowManager.setCurrentWindow(ImageWindow x)必须在另一个线程中执行,并且它在完成之前将控制权返回给我的线程 有没有办法确保当前线程在第一个方法完成执行之前不会继续运行?--我想我可以使用while循环,但我

WindowManager是ij包[ImageJ的java API]中定义的一个类,这里调用的两个方法都是WindowManager类中的静态方法,我的程序只在一个线程中编写

上面的代码在打印“a”“a”和“a”“b”之间有所不同。我在这里的假设是WindowManager.setCurrentWindow(ImageWindow x)必须在另一个线程中执行,并且它在完成之前将控制权返回给我的线程


有没有办法确保当前线程在第一个方法完成执行之前不会继续运行?--我想我可以使用while循环,但我希望有一个比这更有效的解决方案。

除非库提供了一个(它似乎没有提供)。正如您在中所看到的,没有多线程,也没有魔法。只有一个
private static
字段
currentWindow
,它将直接写入
setCurrentWindow
,并在
getCurrentWindow()中无条件返回
。如果这不能提供预期的结果,您应该检查您的代码,即
a.getWindow()
b.getWindow()
真正返回的是什么,或者您如何确定得到的是“'a”“a'”而不是“'a”“b'”。根据您的代码片段,您将看到窗口的
toString()
方法返回的是什么
    WindowManager.setCurrentWindow(a.getWindow());
    System.err.println("Current window is " + WindowManager.getCurrentWindow());
    WindowManager.setCurrentWindow(b.getWindow());
    System.err.println("Current window is " + WindowManager.getCurrentWindow());