2016-06-21 2 views
-1

Я прочитал ряд вопросов и ответов о том, как закрыть текущий поток, но многие используют метод «desroy()», который устарел.Закрытие исполняемого файла, закрывая текущий поток

Я работаю на Java и написал код, который использует многопоточность для одновременного открытия исполняемого файла Notepad. Теперь я хочу закрыть эти исполняемые файлы. Есть ли способ закрыть эти файлы, закрыв/завершая текущие потоки без вызова устаревшего метода?

Пожалуйста, не стесняйтесь, дайте мне знать, если мне нужно уточнить или прояснить любые моменты. Я очень ценю любую помощь, которую вы можете предоставить!

+1

Поскольку вы создали этот процесс самостоятельно, вы можете закрыть его с помощью вызова [Process.destroy] (https://docs.oracle.com /javase/7/docs/api/java/lang/Process.html#destroy \ (\)). См. Также http://stackoverflow.com/questions/6356340/killing-a-process-using-java – dnault

ответ

0

Я полагаю, используя устаревший метод может быть весьма опасными, и есть хорошая статья об этом здесь: https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html Вы можете использовать Thread.interrupt и осуществлять добычу, как это в перспективе() метод:

catch (InterruptedException ex){ 
Thread.currentThread().interrupt(); 
    } 

Override метод прерывания для того, чтобы закрыть поток:

private InputStream in; 
    @Override 
     public void interrupt() { 
      super.interrupt(); 
      try { 
       in.close(); 
      } catch (IOException e) {} 
     } 

, а затем в вашем методе Main() сделать что-то вроде этого:

 Thread t = new MyThread(in); 
     t.start(); 
     Thread.sleep(1000); 
     t.interrupt(); 
     t.join(); 

Надеется, что это даст вам некоторые идеи, в каком направление продолжать ..

0

Если вы начинаете процесс в потоке, и этот процесс заканчивается или destroy() ed, то поток может быть естественным. В качестве альтернативы вы можете прервать поток, не дожидаясь завершения процесса, хотя это не идея, поскольку вы теряете контроль над этим процессом.

Примечание: даже если Thread.destroy() был доступен, он не убил процесс, запущенный в этой теме.

Короче говоря, попробуйте остановить выполнение процесса из потока.

0

Синхронно сигнализировать об этом, чтобы остановить (используя любой механизм, который вы хотите), присоединиться к нему, а затем дать ему собрать мусор.

Смежные вопросы