【发布时间】:2013-10-10 06:31:22
【问题描述】:
我们的应用程序平台是 Java 1.4.2。我们需要在这个版本的JVM(嵌入式系统)上运行某些认证应用程序。
其中一个应用程序正在创建一个线程 T1 来更新文件(通过写入文件)和另一个线程 T2,它应该读取更新的内容(T2 总是在 T1 之后启动)。
问题是写入线程 T1 被延迟,而读取线程 T2 正在读取不正确的数据。线程 T2 不检查文件内容是否已更新。
出于本讨论的目的,可以假设导致延迟的因素是不可修复的。 我们无法更改应用程序,但可以更改 JVM 和原生层接口。
请提出解决方案来序列化对文件的访问而不更改应用程序。 另外,请批评以下方法的可行性: 在 JVM 中创建一个前瞻线程,它可以分析 java 字节码并序列化跨同一应用程序的多个线程对文件的访问。
【问题讨论】:
-
这听起来像是经典的生产者消费者问题。
-
您可以更改应用程序,但您可以更改 JVM,抱歉这没有意义,因为 JVM 可以更改应用程序。您的应用程序中存在错误,再多假装您没有解决问题。如果您可以更改 JVM,请考虑使用 Java 7 作为 Java 1.4.2,Java 5.0 和 Java 6 都将结束生命。
-
同意@Manish,但是如果你只有两个线程,一个用于写作,一个用于阅读。为什么不使用线程连接来确保 T2 连接到 T1。
-
我认为反编译修改它并重新编译它的程序会更好。而不是尝试某种字节码操作。
标签: java multithreading jvm