Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按线程名称或线程组名称终止线程-Java_Java_Multithreading - Fatal编程技术网

按线程名称或线程组名称终止线程-Java

按线程名称或线程组名称终止线程-Java,java,multithreading,Java,Multithreading,如何根据实例的名称终止线程或线程组实例 Thread[] a = new Thread[1000]; int n = Thread.enumerate(a); for (int i = 0; i < n; i++) { if (a[i].getName().equals(name)) { a[i].interrupt(); break; } } Thread[]a=新线程[10

如何根据实例的名称终止
线程
线程组
实例

    Thread[] a = new Thread[1000];
    int n = Thread.enumerate(a);
    for (int i = 0; i < n; i++) {
        if (a[i].getName().equals(name)) {
            a[i].interrupt();
            break;
        }
    }
Thread[]a=新线程[1000];
int n=线程枚举(a);
对于(int i=0;i

虽然interrupt()不会终止线程,但stop()会终止线程(尽管已弃用)

这取决于您所说的“terminate”是什么意思

但第一个技巧是,您必须获得要终止的所有线程的列表。使用
Thread.getThreads()
执行此操作。如果需要,可以按线程组筛选线程

现在,如何停止线程?有两种方法

  • 调用
    stop()
    方法。它已被弃用,您不应该使用它,因为它可能会导致系统进入不一致的状态。然而,如果你真的想。。。此方法仍受支持
  • 每个线程都应该支持关闭机制,即一个“协议”,可以用来通知线程退出其
    run()
    方法。如果所有线程都是您的,您可以使用方法
    terminate()
    使它们实现您自己的接口(例如
    terminateable
    ),该方法将更改标志值并导致线程退出。在这种情况下,终止线程的代码应该在线程上迭代,检查线程是否应该终止,以及它是否实现了接口
    terminateable
    ,对其进行强制转换并调用其
    terminate()
    方法
    你试过什么?你做了什么研究?所以不是你的研究助手。所以我们知道你为完成这项任务所做的一些努力。在我的例子中,我在服务器上运行的线程数是动态的。所以我不能保留那些参考资料。当响应服务时,所有线程挂钩都将消失。我认为使用共享变量或易失性变量来发出信号是行不通的。你怎么会这么想?我可以在会话中使用这些
    Thread
    引用。如果是这样,它也会分配一些内存。如果我可以使用
    线程组
    ,并且如果我可以停止该
    线程组
    下的所有线程,这将更容易。但是像stop()、suspend()等方法在
    ThreadGroup
    中被弃用。重要的是要知道中断线程并不会“终止”它。看:@Evgeniy:这很有帮助。谢谢中断是最好的方法,但是执行代码应该正确地支持它。