相关疑难解决方法(0)

获取当前在Java中运行的所有线程的列表

有没有什么办法可以获得当前JVM中所有正在运行的Thread的列表(包括我的类未启动的Threads)?

是否也可以在列表中获取所有Thread的Thread和Class对象?

我希望能够通过代码完成此操作.

java multithreading jvm

221
推荐指数
10
解决办法
19万
查看次数

Future.cancel()方法不起作用

我创建了一个Callable实例,并使用ExecutorService创建了一个新线程.如果线程未完成执行,我想在一段时间后终止该线程.在浏览了jdk文档之后,我意识到Future.cancel()方法可以用来停止线程的执行,但让我感到沮丧的是它没有用.当然,future.get()方法是在规定的时间(在我的情况下是2秒)之后向线程发送一个中断,甚至线程正在接收这个中断但是只有在线程完成执行后才会发生这种中断完全.但我想在2秒后杀死线程.

任何人都可以帮助我如何实现这一目标.

测试类代码:

====================================

public class TestExecService {

      public static void main(String[] args) {

          //checkFixedThreadPool();
          checkCallablePool();

          }

      private static void checkCallablePool()
      {
          PrintCallableTask task1 = new PrintCallableTask("thread1");

          ExecutorService threadExecutor = Executors.newFixedThreadPool(1);
          Future<String> future = threadExecutor.submit(task1);

          try {
                System.out.println("Started..");
                System.out.println("Return VAL from thread ===>>>>>" + future.get(2, TimeUnit.SECONDS));
                System.out.println("Finished!");
            }
          catch (InterruptedException e) 
          {
            System.out.println("Thread got Interrupted Exception ==============================>>>>>>>>>>>>>>>>>>>>>>>>>");
            //e.printStackTrace();
          }
          catch (ExecutionException e) 
          {
            System.out.println("Thread got Execution Exception ==============================>>>>>>>>>>>>>>>>>>>>>>>>>");
          }
          catch (TimeoutException e)
          {
            System.out.println("Thread got TimedOut Exception ==============================>>>>>>>>>>>>>>>>>>>>>>>>>");
            future.cancel(true);
          } …
Run Code Online (Sandbox Code Playgroud)

java concurrency interrupt interrupt-handling interrupted-exception

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