Java—销毁正在执行某些操作的对象
我看了一些关于Java中析构函数的帖子,了解到Java中没有析构函数,但我不知道如果没有析构函数,我需要在应用程序中做什么 我的应用程序允许用户创建一系列WebCrawler,这些WebCrawler保存在arraylist中。每个爬虫程序都有一个进度面板gui,显示已爬虫的页面等,并允许用户暂停该爬虫程序。但是,用户可能还希望“终止”该爬虫程序。 应该注意的是,Crawler类的每个实例都有一个Scraper类的实例,而Scraper类又有一个DatabaseConnection类的实例 我需要做什么才能让用户按下“Terminate”,让爬虫、它的刮板和刮板的数据库连接都“关闭”并从系统中删除Java—销毁正在执行某些操作的对象,java,multithreading,Java,Multithreading,我看了一些关于Java中析构函数的帖子,了解到Java中没有析构函数,但我不知道如果没有析构函数,我需要在应用程序中做什么 我的应用程序允许用户创建一系列WebCrawler,这些WebCrawler保存在arraylist中。每个爬虫程序都有一个进度面板gui,显示已爬虫的页面等,并允许用户暂停该爬虫程序。但是,用户可能还希望“终止”该爬虫程序。 应该注意的是,Crawler类的每个实例都有一个Scraper类的实例,而Scraper类又有一个DatabaseConnection类的实例 我需
任何建议都将不胜感激。JVM的垃圾收集器最终将从内存中删除任何没有更多引用的对象。删除对象最简单的方法是通过调用arrayList来删除对该对象的引用。remove(elementid)JVM的垃圾收集器最终将从内存中删除没有更多引用的任何对象。删除对象最简单的方法是通过调用arrayList.remove(elementid)来删除对该对象的引用。首先,您需要在单独的线程上运行它才能正常工作(您看到的关于Java GUI无响应的任何信息都是因为没有注意到这一点)
然后,诀窍是让线程做一些事情,定期检查给定的条件是否仍然为真,然后让您的取消按钮进入并重置条件,使其为假(如设置字段,或调用setKeepGoing(false)metod)。当线程发现它们被要求停止时,它们会停止并相应地进行清理。首先,您需要在不同的线程上运行该程序才能正常工作(您看到的关于Java GUI无响应的任何信息都是因为没有注意到这一点) 然后,诀窍是让线程做一些事情,定期检查给定的条件是否仍然为真,然后让您的取消按钮进入并重置条件,使其为假(如设置字段,或调用setKeepGoing(false)metod)。当线程发现它们被要求停止时,它们会停止并相应地清理。我会说:“好好地请求停止” API中不推荐使用Thread.stop,因为它允许您中途停止操作,使应用程序处于潜在的不一致状态。在您的特定情况下,不能依靠垃圾收集来清理保持打开状态的数据库连接,因此您需要在逻辑中管理它 首先,我同意其他答案,你的应用程序需要在用户界面和实际处理之间分层——在你的情况下是爬行。正如您所解释的,爬虫程序通常是长时间运行的任务。因此,他们需要生活在自己的执行线程中,无论是在专用的
线程中,还是更好地使用[ExecutorService][1]
然后,您可以使用不同的方法来停止长时间运行的任务:您可以使用线程来表示给定线程及其相关执行应该停止服务,或者,您可以使用一些应用程序级别的逻辑来向任务发送消息。使用ExecutorService
,您可以保留服务返回的[未来]
并使用它们请求取消任务
在您的中断逻辑中,请记住在文件和数据库连接等资源之后进行清理。我会说:“请很好地停止”
API中不推荐使用Thread.stop,因为它允许您中途停止操作,使应用程序处于潜在的不一致状态。在您的特定情况下,不能依靠垃圾收集来清理保持打开状态的数据库连接,因此您需要在逻辑中管理它
首先,我同意其他答案,你的应用程序需要在用户界面和实际处理之间分层——在你的情况下是爬行。正如您所解释的,爬虫程序通常是长时间运行的任务。因此,他们需要生活在自己的执行线程中,无论是在专用的线程中,还是更好地使用[ExecutorService][1]
然后,您可以使用不同的方法来停止长时间运行的任务:您可以使用线程来表示给定线程及其相关执行应该停止服务,或者,您可以使用一些应用程序级别的逻辑来向任务发送消息。使用ExecutorService
,您可以保留服务返回的[未来]
并使用它们请求取消任务
在中断逻辑中,请记住在文件和数据库连接等资源之后进行清理。阅读java并发:
每个爬虫程序都将有自己的可运行程序来执行其任务。当您向爬虫程序发出终止命令时,您可以在爬虫程序中实现一些代码,这些代码将取消分配资源(数据库连接等)并停止执行。如果您使用的是executor框架,那么还可以使用在调度executor时提供的Future,并在完成时调用“shutdown”,以确保清理线程 在这里阅读java并发:
每个爬虫程序都将有自己的可运行程序来执行其任务。当您向爬虫程序发出终止命令时,您可以在爬虫程序中实现一些代码,这些代码将取消分配资源(数据库连接等)并停止执行。如果您使用的是executor框架,那么还可以使用在调度executor时提供的Future,并在完成时调用“shutdown”,以确保清理线程 您可能想阅读更多关于Java资源管理和垃圾收集的内容。您将在这里找到一些有用的信息-。您可能会