Assume a the conference call will be opened when 4 users join.,
Assume until all the users join, that conference call wont be opened even when the less than 4 users join.
Below example is a simple illustration of the scenario using Cyclic Barrier.
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
package my.test.learning; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierExample { public static void main(String[] args) { CyclicBarrier barrier = new CyclicBarrier(4); ChatUser user1 = new ChatUser("Jake", barrier); ChatUser user2 = new ChatUser("Mike", barrier); ChatUser user3 = new ChatUser("Don", barrier); ChatUser user4 = new ChatUser("Kar", barrier); user1.start(); user2.start(); user3.start(); user4.start(); } } class ChatUser extends Thread { private String username; boolean join = false; boolean conferenceCallOpened = false; private CyclicBarrier cyclicBarrier; public ChatUser(String username, CyclicBarrier cyclicBarrier) { this.username = username; this.cyclicBarrier = cyclicBarrier; } @Override public void run() { joinedConference(); try { cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } openConferenceCall(); } public void joinedConference() { join = true; System.out.println(username + " has joined the conference call.."); } public void openConferenceCall() { conferenceCallOpened = true; System.out.println("Conference call Opened"); // May be can write any function to open the conference call... } } |
Result:
1 2 3 4 5 6 7 8 |
Mike has joined the conference call.. Kar has joined the conference call.. Jake has joined the conference call.. Don has joined the conference call.. Conference call Opened Conference call Opened Conference call Opened Conference call Opened |