java 多线程中的ANOJ

yruzcnhs  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(94)

目前,我正在开发一个应用程序,它在16个线程上运行相同的进程(在本例中是TaskInformation,具有不同的输入参数)。我想创建Aspect,从中获取参数和值,并将它们存储在Aspect内部创建的Object中。
我的问题是这个对象是为每个线程独立创建的,我可以调用对象的确切示例,这样我就可以为每个线程存储正确的值。
如果可能的话,我会避免threadLocal,因为这是我目前在没有方面的情况下使用的东西,我希望我可以避免它。
谢谢你提前帮忙!
我使用threadLocal,我想重构它。
编辑:我们有一个Process类,在其中我们正在查看process方法,该方法在多个线程中同时运行。我想用每个线程的信息填充LoggingObject,并在最后将它们记录为整个处理的摘要。
范例:

public aspect MyAspect {

private final LoggingObject log = new LoggingObject()

        pointcut processMethodExecution(TaskInformation taskInfo):
        execution(TaskStatus Processor.process(TaskInformation)) && args(taskInfo);

        after(TaskInformation taskInfo): processMethodExecution(taskInfo) {
        logger.info("Processing task with ID: " + taskInfo.getTaskId());
        log.setID(taskInfo.getTaskId())
        }
        }
blmhpbnm

blmhpbnm1#

您有几种选择:

  • 继续使用thread-local字段,如果它适合您的话。我不希望它有什么问题。
  • 用一个Map替换thread-local,其中线程ID作为键,数据作为值。但是,如果使用线程池等,则要小心,因为线程将被重用。确保设计方面的方式能够使数据按预期进行初始化。但实际上,对于线程局部也是如此。
  • 选择一个非单例方面示例化模型,如my answer here或类似的here中所述。答案还指向ANOJ手册,它为您提供了更多的技术细节。

相关问题