Skip to content

Latest commit

 

History

History
36 lines (30 loc) · 1.11 KB

synchronized_process_wait.md

File metadata and controls

36 lines (30 loc) · 1.11 KB

今天遇到/学习了 java.lang.IllegalMonitorStateException: current thread is not owner

报错原因是 Process.wait 没加 synchronized; 与之类似的 waitFor 则不需要加

要是 wait 没加 sync 能在编译时检查就好了 例如来个 wait not impl Send/Sync, can't send/share between threads safety 编译报错提示

https://twitter.com/ospopen/status/1523589984389038081

package com.example;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        var processBuilder = new ProcessBuilder("pwd");
        //processBuilder.directory(new File(dir));
        processBuilder.inheritIO();
        try {
            var p = processBuilder.start();
            // waitFor not require synchronized
            //p.waitFor();
            synchronized (p) {
                p.wait();
            }
            if (p.exitValue() != 0) {
                System.err.println("err");
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}