相关疑难解决方法(0)

取消长期运行的正则表达式匹配?

假设我正在运行一项服务,用户可以提交正则表达式来搜索大量数据.如果用户提交一个非常慢的正则表达式(即,需要几分钟才能返回Matcher.find()),我想要一种方法来取消该匹配.我能想到这样做的唯一方法是让另一个线程监视匹配的持续时间,并在必要时使用Thread.stop()取消它.

成员变量:

long REGEX_TIMEOUT = 30000L;
Object lock = new Object();
boolean finished = false;
Thread matcherThread;
Run Code Online (Sandbox Code Playgroud)

匹配线程:

try {
    matcherThread = Thread.currentThread();

    // imagine code to start monitor thread is here

    try {
        matched = matcher.find();
    } finally {
        synchronized (lock) {
            finished = true;
            lock.notifyAll();
        }
    }
} catch (ThreadDeath td) {
    // send angry message to client
    // handle error without rethrowing td
}
Run Code Online (Sandbox Code Playgroud)

监控线程:

synchronized (lock) {
    while (! finished) {
        try {
            lock.wait(REGEX_TIMEOUT);

            if (! …
Run Code Online (Sandbox Code Playgroud)

java regex multithreading

19
推荐指数
2
解决办法
6318
查看次数

Java中的Executor和Daemon

我有一个MyThread对象,当我的应用程序通过服务器加载时,我将其实例化,我将其标记为守护程序线程,然后调用start()它.只要应用程序处于活动状态,该线程就会等待队列中的信息.我的问题/问题是:目前MyThread正在扩展Thread,因为我将它标记为守护进程,并且我读到了如何实现Runnable以及使用Executor更令人满意.所以我想问的是,如果MyThread将实现Runnable而不是扩展Thread(当然会被重命名),我将使用newSingleThreadScheduledExecutor()how,what或者where在哪里标记为Daemon.我希望我没有弄乱一些条款,请原谅我,如果因为多线程环境的某些部分对我来说是非常新的.

谢谢Ittai

更新:我在我的应用程序中引用的模块是一个Web应用程序,它实际上有几个这样的线程,它们的共同点是它们都是ServletContext作为成员出于各种原因.目前,我延长ThreadWebThread它具有ServletContext作为memebr和所有子类可以利用这一点.如果我切换到与执行者了Runnable范式和的ThreadFactory比基本上我需要有一个丑陋的混合动力车WebRunnable,它实现Runnable并具有ServletContext作为公共成员,并且对我的ThreadFactory落实newThread(WebRunnable arg0)除了newThread(Runnable arg0).我不确定什么是最好的.谢谢

java multithreading daemon executor

11
推荐指数
2
解决办法
1万
查看次数

Java中的悬空线程

在Java中悬空线程会发生什么?

就像我创建一个应用程序并生成多个线程一样.其中一个线程没有完成,主程序在此之前完成.这个悬空线会发生什么?是否会无限期地保留在线程池中,否则JVM会在阈值时间段后终止该线程???

java multithreading

3
推荐指数
1
解决办法
871
查看次数

标签 统计

java ×3

multithreading ×3

daemon ×1

executor ×1

regex ×1