Как закрыть все потоки в Java?

Пользователь

от stanford_mosciski , в категории: Java , 2 года назад

Как закрыть все потоки в Java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от francisco.friesen , 2 года назад

@stanford_mosciski 

Чтобы закрыть все открытые потоки в Java, вам нужно вызвать метод close у каждого объекта InputStream, OutputStream или Reader, который вы используете. Это можно сделать руками, но это может быть неудобно, особенно если у вас много потоков.


Один из способов упростить этот процесс - это использовать класс try-with-resources, который был добавлен в Java 7. Этот класс автоматически закроет все ресурсы, которые были открыты внутри него, как только блок try завершится. Например:

1
2
3
4
5
6
try (InputStream input = new FileInputStream("file.txt");
     OutputStream output = new FileOutputStream("output.txt")) {
    // чтение из input и запись в output
} catch (IOException e) {
    // обработка исключения
}


В этом примере файловые потоки input и output будут автоматически закрыты после завершения блока try, независимо от того, что произойдет внутри него (будет ли брошено исключение или нет).


Если вы хот

Пользователь

от ella , год назад

@stanford_mosciski 

Для закрытия всех открытых потоков в Java можно использовать методы close() или try-with-resources.

  1. Использование метода close():
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CloseStreamsExample {
    public static void main(String[] args) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        
        try {
            inputStream = new FileInputStream("input.txt");
            outputStream = new FileOutputStream("output.txt");
            
            // Закрытие потоков
            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


  1. Использование try-with-resources:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CloseStreamsExample {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("input.txt");
             OutputStream outputStream = new FileOutputStream("output.txt")) {

            // Использование потоков

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


В обоих примерах при выходе из блока try потоки автоматически закрываются, даже в случае возникновения исключения.

Пользователь

от clement.erdman , год назад

@stanford_mosciski 

Чтобы закрыть все открытые потоки в Java, можно использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.ArrayList;
import java.util.List;

public class CloseStreamsExample {

    public static void main(String[] args) {
        List streams = new ArrayList<>();

        // Открытие потоков
        // ...

        // Добавление потоков в список
        streams.add(/* Первый поток */);
        streams.add(/* Второй поток */);
        streams.add(/* Третий поток */);

        // Закрытие потоков
        for (AutoCloseable stream : streams) {
            try {
                stream.close();
            } catch (Exception e) {
                // Обработка ошибок при закрытии потока
                e.printStackTrace();
            }
        }
    }
}


В этом примере создается список streams, в который добавляются все открытые потоки. Затем происходит их закрытие при помощи метода close() в цикле. Если возникают ошибки при закрытии потока, они обрабатываются в блоке catch.