我在java函数中运行正则表达式来解析文档,如果找到正则表达式指定的字符串则返回true,如果没有则返回false.但问题是,当文档不包含正则表达式指定的字符串时,返回false需要很长时间,如果执行时间超过6秒,我想终止该函数.
如何在该功能上设置6秒的时间限制,以便在超过6秒的时间内强制终止该功能.
我从类1调用类2的方法"方法1"."方法1"调用同一类的"方法2",即"类2".方法2在文档上运行正则表达式代码.如果它找到正则表达式指定的字符串,那么它将结果返回给方法1,方法1又将结果返回到"类1"中的方法,该方法调用了类2的"方法1".现在的问题是类2的method1和method2的执行时间不应超过6秒.
所以,我在同一个文件中创建了一个新的RegexpThread类,其中我的class2是.然后我将class2的method2移动到RegexpThread类中.然后每当调用方法1时,它都会实例化RegexpThread类,如下所示:
RegexpThread rt = new RegexpThread() {
public void run() {
method 2(m, urlCopy, document);
}
};
rt.start();
try {
rt.join(6 * 1000);
} catch (InterruptedException e) {
return "y";
}
if(rt.getResultXml().equals("")) {
return "g";
}
resultXml.append(rt.getResultXml());
return resultXml.toString();
Run Code Online (Sandbox Code Playgroud)
显示的代码位于class2的方法1中.RegexpThread类中的方法2对文档执行一些正则表达式搜索.RegexpThread类中有一个名为"resultXml"的私有字段.如果方法2找到了正则表达式指定的字符串,则它将结果分配给私有字段"resultXml".如果不是,则"resultXml"包含其默认值,即空字符串.
因此,在上面的"if block"中,它正在针对空字符串检查"resultXml"字段.如果它是一个空字符串,那么这意味着正则表达式没有在文档中找到它的字符串.但是如果它不是空字符串那么这意味着正则表达式在文档中找到了字符串并将结果分配给"resultXml"字段.
所以,看看这个并告诉我该怎么做......
我需要使用deprecated stop(),因为我需要运行由其他程序员开发的Runnable类,我不能在方法运行中使用while(isRunning == true).
问题是:使用方法stop()足够安全吗?Theads不适用于任何资源(如文件,数据库或Internet连接).但我希望确保在使用stop()方法停止十几个线程后JVM不会被破坏.
PS:是的,我可以编写一些代码来测试它,但我希望有人知道答案)
我想在我们的应用程序中添加groovy-shell-server.我们最近遇到了几个生产问题,内部API的调用可以加快诊断速度,甚至可以提供短期修复.Groovy-shell-server提供了一种实现这一目标的好方法.
但实际上在生产中使用它会带来潜在的复杂性.让我们说,尽管经过仔细的同行评审,我们还是会执行一个固定CPU的脚本,或者陷入无限循环.我需要一些方法来杀死那个线程,发音!所以我在考虑增强groovy-shell-server以支持正在运行的Groovy客户端线程的可选硬件停止().
我知道Thread.stop()本质上是不安全的 ; 之前在StackOverflow上讨论过它.我的问题是,您认为这种情况下的好处可能超过风险吗?使用Thread.stop()作为一种失控的GroovyShell服务器线程的"紧急制动"是一种实用的选择吗?或者将对象置于不一致状态的可能性太高了?
(或者,如果某人有更好的方式来提供对正在运行的java应用程序的编程,可中断访问,我会全力以赴.)
我创建了一个名为 ThreadClass 的类(如您所见,这是一个线程),其结构类似于以下内容
class SomeTask implements Runnable
{
boolean someCondition=true;
public void run() {
try
{
while(someCondition)
{
//Here goes the Process Code
}
}
catch(Exception errorException)
{
//Catching the Exception
}
finally
{
////I expect that this finally should run every time ,whatever happens in the world
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是关于finally块和stop()方法
由于上面的类正在实现 Runnable,所以我可以创建这个类的对象并通过调用start()方法启动它的一个线程。我也知道我可以使用stop()停止这个线程(是的,我知道它已被弃用) 方法。
我想澄清的是,如果我需要以某种方式调用 ThreadClass 对象上的 stop 方法,那么即使线程通过调用stop()停止,我也可以依靠finally块来执行,因为我正在做一些重要的事情在 finally 块中关闭东西。