|  import java.util.concurrent.Semaphore;
 
 public class Main {
 public static void main(String args[]) throws Exception {
 Semaphore sem = new Semaphore(1, true);
 Thread thrdA = new Thread(new SyncOutput(sem, "Message 1"));
 Thread thrdB = new Thread(new SyncOutput(sem, "Message 2!"));
 
 thrdA.start();
 thrdB.start();
 
 thrdA.join();
 thrdB.join();
 
 }
 }
 
 class SyncOutput implements Runnable {
 Semaphore sem;
 String msg;
 SyncOutput(Semaphore s, String m) {
 sem = s;
 msg = m;
 }
 
 public void run() {
 try {
 sem.acquire();
 System.out.println(msg);
 Thread.sleep(10);
 } catch (Exception exc) {
 System.out.println("Error Writing File");
 }
 sem.release();
 }
 }
 
 
 
 |