java - 重新解决重启问题

标签 java

我正在开发一个人工智能程序来探索给定的资源空间。

我想运行多个场景以收集数据并将其输出到文件。

我在 GUI 中使用了“多次运行”选项,当一个模块运行完成时(所有资源都已被探索),我执行了 stop() 。问题是当模型第二轮运行时,它无法正常工作。

我的意思是,运行一次后,我总是需要通过退出来终止应用程序,因为重新启动选项无法正常工作。

有什么“重启”忘记做的事情吗?因为如果我退出应用程序并再次运行它,它就会完美运行

已编辑,使其更清晰:

我使用Repast平台以模拟火星探索。我有3种代理,侦察、挖掘和运输。他们之间进行通信以安排任务和其他事情。

我第一次运行模拟时,一切都运行顺利。本地球上的所有矿产资源都被勘探完后,我重新启动模型并重试,以便收集数据。

问题是,当我使用“重新启动”选项时,模拟运行不佳。但如果我退出(而不是重新启动)并再次运行它,它就可以正常工作。

我想知道的是 Repast GUI 的重启选项是否遗漏了任何步骤..

提前致谢

PS:如果你们认为这是绝对必要的,我可以发布一些代码......但项目相当大

最佳答案

  1. 不要使用Thread.stop()方法。它已被弃用。 Thread.stop 已被弃用,因为它本质上是不安全的。停止线程会导致它解锁所有已锁定的监视器。 (当 ThreadDeath 异常在堆栈中向上传播时,监视器将被解锁。)如果先前受这些监视器保护的任何对象处于不一致的状态,则其他线程可能会以不一致的状态查看这些对象。据说这些物体已被损坏。对损坏对象进行操作的线程可以表现出任意行为,无论是明显的还是不明显的。与其他未经检查的异常不同,ThreadDeath 会默默地杀死线程;因此,用户不会收到程序可能已损坏的警告。损坏可能会在损坏发生后的不可预测的时间显现出来。将 Thread.stop 的任何使用替换为提供更温和终止的代码。

http://docs.sun.com/app/docs/doc/805-4031/6j3qv1of1?a=view

  1. 考虑通过 Thread.interrupt() 或通过设置取消标志来停止线程。请参阅实践中的 Java 并发,第 7.1 节。任务取消。

关于java - 重新解决重启问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320644/

相关文章:

java - 使用 hasNext 检查后出现 InputMismatchException

java - 核心 JSF2 项目可重用于其他项目 [JAR]

java - 适用于 Android 的 Google 快捷方式

java - 引用配置管理工厂创建的 OSGi 服务

java - 将 Apple 的 Cocoa 框架 Epoch (reference_date) 转换为 Java Date

不需要新的 : allocated contiguosly 的对象的 Java 数组

java - 在 JDBC 中查看结果集时不检索记录

java - 发射后取消订阅间隔

java - 使用 Spring Boot 显示的动态列数

Java正则表达式在没有Dotall的情况下忽略换行符