gpt4 book ai didi

java - 什么是javac/java文件系统并发契约?

转载 作者:行者123 更新时间:2023-11-30 09:56:36 25 4
gpt4 key购买 nike

我正在运行一个多线程构建,其中有两个依赖的 com.sun.tools.javac.Main.compile() 调用在不同的线程上运行,它们之间有大约 10 毫秒的暂停。每隔一段时间(大约每 100 个构建),第二个 javac 会提示第一个 javac 的输出中的错误类格式。

这是在 linux 上,但它必须适用于所有操作系统。我在这里面临的限制是什么?

我正在并发构建系统上工作,所以我调用 javacs 的原因是因为它们位于不同的模块中。有确保运行顺序的外部同步(但当我调用 compile() 方法时我实际上并不在同步块(synchronized block)内),而且我确信它们被一个接一个地调用,大约 10平均停顿 -20 毫秒。据我所知,这两个对 compile() 的调用真的应该只共享文件系统吗?

编辑 2:调用第二个 compile() 调用的线程在 wait() 中,直到第一个调用完成,因此存在顺序同步。但是当我调用实际的编译调用时,我不在同步块(synchronized block)中。 Compile 是一种静态方法,我假设他们在该上下文中没有任何内部安全发布问题...(?)

编辑 3:同步对 compile() 的调用没有帮助。仅调用 sync() 到 linux 也不行。但如果可能的话,我还没有研究过在 Java 级别刷新缓冲区。

最佳答案

What is the javac/java file system concurrency contract ?

没有一个。如果您正在线程 A 中编译一个线程 B 中的另一个编译器需要的类,那么您不应该这样做。就这么简单。

关于java - 什么是javac/java文件系统并发契约?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com