gpt4 book ai didi

java - 多线程通信 (java)

转载 作者:行者123 更新时间:2023-11-30 07:31:38 25 4
gpt4 key购买 nike

我正在撰写标准迷宫求解算法和基于神经网络的迷宫求解算法的分析。我已经创建了 7 个类(目前),每个类对应一个迷宫求解算法。在我的主类中,我初始化每个算法对象,为每个对象创建一个线程,并让它们解决一个生成的迷宫。每个算法基本上都由一个主循环和内部部分组成。在每个循环的末尾,我都有一个代码段,用于记录分析所需的信息(时间、步数、圈数等)。在每个算法线程完成后,我调用一个函数,该函数获取每个算法对象并创建已解决迷宫的 png。然后我只需将这张图片加载到一个窗口中。

这工作正常,但对于现场演示,我希望图像在每个循环周期更新,以便我可以实时显示正在解决的迷宫。为此,我需要每个线程在它们记录信息的部分停止循环,直到主线程调用创建 png 的函数。我不太确定如何进行这种通信,因为所有算法都在不同的时间完成一个循环。

这是我目前在主要功能中的代码:

DepthFirst generator = new DepthFirst(30); // Generates the maze to be solved
byte[][] hi = generator.generate();

JFrame frame = new JFrame("DepthFirstTrial0"); // Creates the window to
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // display the finished maze

MazeSolver mazes[] = new MazeSolver[7]; // Creates each of the algorithms
mazes[0] = new RandomMouse(hi); // They are all subclasses of MazeSolver
mazes[1] = new LeftHandFollower(hi);
mazes[2] = new RightHandFollower(hi);
mazes[3] = new Pledge(hi);
mazes[4] = new Tremaux(hi);
mazes[5] = new RecursiveBacktracker(hi);
mazes[6] = new DeadEndFiller(hi);

Thread mazeThreads[] = new Thread[7];
for(int i = 0; i < 7; i++) {
mazeThreads[i] = new Thread(mazes[i]); // Puts each one in a threaad
}

for(int i = 0; i < 7; i++) {
mazeThreads[i].start(); // Starts each thread
}

Thread.sleep(1000) // Waits at most one second for them to finish

MazeSolver.toPng(mazes, 0, "DepthFirst"); // Creates the png
frame.getContentPane().add(new MazeAlgorithmAnalyzer.loadImage()); // Loads into the window
frame.pack();
frame.setVisible(true);

如有任何帮助,我们将不胜感激。提前致谢!阿什温

最佳答案

你想要一个 CyclicBarrier .

在每个迷宫解算器的每个线程中,在每个步骤之后您只需添加行

cyclicBarrier.await();

它们会在那条线等待,直到所有其他线程也都在该点,然后它们一起重新开始。

关于java - 多线程通信 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210455/

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