我在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();
显示的代码位于class2的方法1中. RegexpThread类中的方法2对文档执行一些正则表达式搜索. RegexpThread类中有一个名为“resultXml”的私有字段.如果方法2找到了正则表达式指定的字符串,则它将结果分配给私有字段“resultXml”.如果不是,则“resultXml”包含其默认值,即空字符串.
因此,在上面的“if block”中,它正在针对空字符串检查“resultXml”字段.如果它是一个空字符串,那么这意味着正则表达式没有在文档中找到它的字符串.但是如果它不是空字符串那么这意味着正则表达式在文档中找到了字符串并将结果分配给“resultXml”字段.
所以,看看这个并告诉我该怎么做……
你做了什么看起来很好我在这里是我如何修改它:
原文链接:https://www.f2er.com/regex/357272.htmlfinal AtomicReference<String> resultXml = new AtomicReference<String>(); RegexpThread rt = new RegexpThread() { public void run() { method2(m,document,resultXml); } }; rt.start(); try { rt.join(6 * 1000); } catch (InterruptedException e) { return "y"; } if(resultXml.get() == null) { rt.interupt(); return "g"; } resultXml.append(resultXml.get()); return resultXml.toString();