diff --git a/core-java/README.md b/core-java/README.md index 56dee29899..ead65ab166 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -100,3 +100,4 @@ - [Guide to sun.misc.Unsafe](http://www.baeldung.com/java-unsafe) - [HashSet and TreeSet Comparison](http://www.baeldung.com/java-hashset-vs-treeset) - [How to Perform a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request) +- [Call Methods at Runtime Using Java Reflection](http://www.baeldung.com/java-method-reflection) diff --git a/core-java/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java b/core-java/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java new file mode 100644 index 0000000000..dd1487b5cb --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java @@ -0,0 +1,27 @@ +package com.baeldung.concurrent.phaser; + +import java.util.concurrent.Phaser; + +class LongRunningAction implements Runnable { + private String threadName; + private Phaser ph; + + LongRunningAction(String threadName, Phaser ph) { + this.threadName = threadName; + this.ph = ph; + ph.register(); + } + + @Override + public void run() { + System.out.println("This is phase " + ph.getPhase()); + System.out.println("Thread " + threadName + " before long running action"); + ph.arriveAndAwaitAdvance(); + try { + Thread.sleep(20); + } catch (InterruptedException e) { + e.printStackTrace(); + } + ph.arriveAndDeregister(); + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/concurrent/phaser/PhaserTest.java b/core-java/src/test/java/com/baeldung/concurrent/phaser/PhaserTest.java new file mode 100644 index 0000000000..7ba1b1ebd9 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/phaser/PhaserTest.java @@ -0,0 +1,41 @@ +package com.baeldung.concurrent.phaser; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Phaser; + +import static junit.framework.TestCase.assertEquals; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class PhaserTest { + + @Test + public void givenPhaser_whenCoordinateWorksBetweenThreads_thenShouldCoordinateBetweenMultiplePhases() { + //given + ExecutorService executorService = Executors.newCachedThreadPool(); + Phaser ph = new Phaser(1); + assertEquals(0, ph.getPhase()); + + //when + executorService.submit(new LongRunningAction("thread-1", ph)); + executorService.submit(new LongRunningAction("thread-2", ph)); + executorService.submit(new LongRunningAction("thread-3", ph)); + + //then + ph.arriveAndAwaitAdvance(); + assertEquals(1, ph.getPhase()); + + //and + executorService.submit(new LongRunningAction("thread-4", ph)); + executorService.submit(new LongRunningAction("thread-5", ph)); + ph.arriveAndAwaitAdvance(); + assertEquals(2, ph.getPhase()); + + + ph.arriveAndDeregister(); + } +} diff --git a/core-java/src/test/java/com/baeldung/java/doublebrace/DoubleBraceTest.java b/core-java/src/test/java/com/baeldung/java/doublebrace/DoubleBraceTest.java index 77d94f6544..531aa8970d 100644 --- a/core-java/src/test/java/com/baeldung/java/doublebrace/DoubleBraceTest.java +++ b/core-java/src/test/java/com/baeldung/java/doublebrace/DoubleBraceTest.java @@ -1,18 +1,21 @@ package com.baeldung.java.doublebrace; +import org.junit.Test; + import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; + +import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toSet; import static org.junit.Assert.assertTrue; -import org.junit.Test; public class DoubleBraceTest { @Test public void whenInitializeSetWithoutDoubleBraces_containsElements() { - final Set countries = new HashSet(); + final Set countries = new HashSet<>(); countries.add("India"); countries.add("USSR"); countries.add("USA"); @@ -34,7 +37,9 @@ public class DoubleBraceTest { @Test public void whenInitializeUnmodifiableSetWithDoubleBrace_containsElements() { - final Set countries = Collections.unmodifiableSet(Stream.of("India", "USSR", "USA").collect(toSet())); + Set countries = Stream.of("India", "USSR", "USA") + .collect(collectingAndThen(toSet(), Collections::unmodifiableSet)); + assertTrue(countries.contains("India")); } diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java index 361a7b1c03..acdd836c8c 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java @@ -5,7 +5,9 @@ import javax.annotation.security.RolesAllowed; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +import com.baeldung.autoconfiguration.MySQLAutoconfiguration; + +@SpringBootApplication(exclude = MySQLAutoconfiguration.class) public class DynamicValidationApp { @RolesAllowed("*") public static void main(String[] args) {