Java : AbstractInterruptibleChannel with Examples

AbstractInterruptibleChannel (Java SE 20 & JDK 20) API Examples.
You will find code examples on most AbstractInterruptibleChannel methods.


Summary

Base implementation class for interruptible channels.

Class diagram

try (final var executor = Executors.newSingleThreadExecutor()) {

    final var future = executor.submit(() -> {
        try (final var channel = ServerSocketChannel.open()) {

            System.out.println("AbstractInterruptibleChannel : "
                    + (channel instanceof AbstractInterruptibleChannel));

            System.out.println("bind ...");
            channel.bind(new InetSocketAddress("127.0.0.1", 8000));
            System.out.println("bind OK!");

            System.out.println("accept ...");
            channel.accept();
            System.out.println("accept OK!");

        } catch (ClosedByInterruptException e) {
            System.out.println("ClosedByInterruptException!");
        } catch (IOException e) {
            System.out.println("IOException!");
        }
    });

    TimeUnit.SECONDS.sleep(2);

    System.out.println("-- future.cancel --");
    future.cancel(true);
}

// Result
// ↓
//AbstractInterruptibleChannel : true
//bind ...
//bind OK!
//accept ...
//-- future.cancel --
//ClosedByInterruptException!
try (final var executor = Executors.newSingleThreadExecutor()) {

    try (final var channel = ServerSocketChannel.open()) {
        executor.submit(() -> {
            try {
                System.out.println("bind ...");
                channel.bind(new InetSocketAddress("127.0.0.1", 8000));
                System.out.println("bind OK!");

                System.out.println("accept ...");
                channel.accept();
                System.out.println("accept OK!");

            } catch (AsynchronousCloseException e) {
                System.out.println("AsynchronousCloseException!");
            } catch (IOException e) {
                System.out.println("IOException!");
            }
        });

        TimeUnit.SECONDS.sleep(2);

        System.out.println("-- channel.close --");
    }
}

// Result
// ↓
//bind ...
//bind OK!
//accept ...
//-- channel.close --
//AsynchronousCloseException!

Constructors

AbstractInterruptibleChannel ()

Initializes a new instance of this class.

protected. I think it's rare to create a subclass of this class. Therefore, the code example is omitted.

Methods

protected final void begin ()

Marks the beginning of an I/O operation that might block indefinitely.

protected. I think it's rare to create a subclass of this class. Therefore, the code example is omitted.

final void close ()

Closes this channel.

final var path = Path.of("R:", "java-work", "test.data");
System.out.println(path); // R:\java-work\test.data

AbstractInterruptibleChannel channel;
try (final var fc = FileChannel.open(path,
        StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {

    channel = fc;
    System.out.println(channel.isOpen()); // true
}

System.out.println(channel.isOpen()); // false

An example without a try-with-resources statement.

final var path = Path.of("R:", "java-work", "test.data");
System.out.println(path); // R:\java-work\test.data

final AbstractInterruptibleChannel channel = FileChannel.open(path,
        StandardOpenOption.CREATE, StandardOpenOption.WRITE);
try {
    System.out.println(channel.isOpen()); // true
} finally {
    channel.close();
}

System.out.println(channel.isOpen()); // false

protected final void end (boolean completed)

Marks the end of an I/O operation that might block indefinitely.

protected. I think it's rare to create a subclass of this class. Therefore, the code example is omitted.

protected abstract void implCloseChannel ()

Closes this channel.

protected. I think it's rare to create a subclass of this class. Therefore, the code example is omitted.

final boolean isOpen ()

Tells whether or not this channel is open.

Please see close().


Related posts

To top of page