BAEL-3439 - Add selector.wakeup() section (#10398)

* Add selector.wakeup() section

* Update SelectorTest.java

* Update core-java-modules/core-java-nio-2/src/test/java/com/baeldung/selector/SelectorTest.java

* Update SelectorTest.java

* Update and rename SelectorTest.java to SelectorUnitTest.java

* Update SelectorUnitTest.java

* Update and rename SelectorUnitTest.java to SelectorManualTest.java
This commit is contained in:
Benedict Ayiko 2021-02-26 11:41:58 +03:00 committed by GitHub
parent 7d0f63b213
commit 4ab767bec2
2 changed files with 72 additions and 1 deletions

View File

@ -14,5 +14,12 @@
<version>0.0.1-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.6.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,64 @@
package com.baeldung.selector;
import org.junit.Test;
import java.io.IOException;
import java.nio.channels.Pipe;
import java.nio.channels.SelectableChannel;
import java.nio.channels.Selector;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import static org.assertj.core.api.Assertions.assertThat;
import static java.nio.channels.SelectionKey.OP_READ;
public class SelectorManualTest {
@Test
public void whenWakeUpCalledOnSelector_thenBlockedThreadReturns() throws IOException, InterruptedException {
Pipe pipe = Pipe.open();
Selector selector = Selector.open();
SelectableChannel channel = pipe.source();
channel.configureBlocking(false);
channel.register(selector, OP_READ);
List<String> invocationStepsTracker = Collections.synchronizedList(new ArrayList<>());
CountDownLatch latch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
invocationStepsTracker.add(">> Count down");
latch.countDown();
try {
invocationStepsTracker.add(">> Start select");
selector.select();
invocationStepsTracker.add(">> End select");
} catch (IOException e) {
e.printStackTrace();
}
});
invocationStepsTracker.add(">> Start await");
thread.start();
latch.await();
invocationStepsTracker.add(">> End await");
invocationStepsTracker.add(">> Wakeup thread");
selector.wakeup();
channel.close();
assertThat(invocationStepsTracker)
.containsExactly(
">> Start await",
">> Count down",
">> Start select",
">> End await",
">> Wakeup thread",
">> End select"
);
}
}