gpt4 book ai didi

java - 如何保证重写方法的线程安全?

转载 作者:行者123 更新时间:2023-11-29 06:20:04 26 4
gpt4 key购买 nike

我已经为此苦苦挣扎了 7 天。非常感谢您的见解。

考虑框架代码。

final class Main {
// assuming programmerCode was injected
Interface inter = (Interface) programmerCode;
inter.doProcess();
}

interface Interface {
void doProcess();
}

abstract ProgramApp implements Interface {
public void doProcess() {
for (File file : files) {
foo(file);
bar(file);
}
}

public abstract void foo(File file);
public abstract void bar(File file);
}

abstract Program extends ProgramApp {
public final void doProcess() { }
}

以及使用它的代码,

class ProgrammerCode extends Program {

File file;
String a1;
String a2;

public void foo(File file) {
// read file per line store in a1
}

public void bar(File file) {
// read file per line and append somestring and store in a2
}
}

现在,这个程序按顺序处理文件。关于如何使该程序在不触及 ProgrammerCode 的情况下并行处理文件的任何建议?

目标:每个文件都应该使用 ProgrammerCode 中方法的实现独立并行处理,而不修改它。修改应该在框架代码的某处完成。

我真的不知道把线程部分放在哪里。我的假设是它应该在文件循环中,但我不知道它是否是线程安全的,因为我将使用 ProgrammerCode 中定义的方法。

最佳答案

我的建议是使文件处理完全独立。这完全消除了多线程问题,并允许在不关心并发性的情况下扩展/实现接口(interface)。您可以使用 java.util.concurrent 的 ThreadPoolExecutor 并行执行文件任务。

伪代码如下所示:

主(){

文件文件;ThreadPoolExecutor池;

对于(文件文件:文件){ pool.execute(new Runnable() { 运行() { Interface inter = (Interface) 程序员代码; inter.doProcess(文件); } });}

关于java - 如何保证重写方法的线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492866/

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