Вы находитесь на странице: 1из 8

1

1.Program showing two threads acting upon a single object


class Reserve implements Runnable { int available=1; int wanted; Reserve(int i) { wanted=i; } public void run() { System.out.println("Available Berths="+available); if(available>=wanted) { String name=Thread.currentThread().getName(); System.out.println(wanted +" Berths Reserved For "+ name); try { Thread.sleep(1500); available=available-wanted; } catch (InterruptedException ie) { } } else System.out.println("Sorry,no berths"); } };

class Unsafe { public static void main(String[]args) { Reserve obj=new Reserve(1); Thread t1=new Thread(obj); Thread t2=new Thread(obj); t1.setName("FirstPerson"); t2.setName("SecondPerson"); t1.start(); t2.start(); } };

Output:
Available Berths=1 1Berths Reserved For FirstPerson Available Berths=1 1Berths Reserved For SecondPerson

2.Program to synchronize the threads acting on the same object.The synchronized block in the program can be executed by only one thread at a time

class Reserve1 implements Runnable { int available=1; int wanted; Reserve1(int i) { wanted=i; } public void run() { synchronized(this) { System.out.println("Available Berths="+available); if(available>=wanted) { String name=Thread.currentThread().getName(); System.out.println(wanted +" Berths Reserved For "+ name); try { Thread.sleep(1500); available=available-wanted; } catch (InterruptedException ie) { } } else System.out.println("Sorry,no berths"); } } };

class Safe { public static void main(String[]args) { Reserve1 obj=new Reserve1(1); Thread t1=new Thread(obj); Thread t2=new Thread(obj); t1.setName("FirstPerson"); t2.setName("SecondPerson"); t1.start(); t2.start(); } };

Output:
Available Berths=1 1Berths Reserved For FirstPerson Available Berths=0 Sorry,no berths

3.Program depicting a situation in which a deadlock can occur


class BookTicket extends Thread { Object train,comp; BookTicket(Object train,Object comp) { this.train=train; this.comp=comp; } public void run() { synchronized(train) { System.out.println("BookTicket locked on Train"); try { Thread.sleep(150); } catch (InterruptedException e) { } System.out.println("BookTicket now waiting to lock on compartment.."); synchronized(comp) { System.out.println("BookTicket locked on Compartment"); } } } }; class CancelTicket extends Thread { Object train,comp; CancelTicket(Object train,Object comp) { this.train=train; this.comp=comp; } public void run() { synchronized(comp) { System.out.println("CancelTicket locked on Compartment");

6 try { Thread.sleep(150); } catch (InterruptedException e) { } System.out.println("CancelTicket now waiting to lock on Train.."); synchronized(train) { System.out.println("CancelTicket locked on train"); } } } };

class DeadLock { public static void main(String[]args) { Object train=new Object(); Object compartment=new Object(); BookTicket obj1=new BookTicket(train,compartment); CancelTicket obj2=new CancelTicket(train,compartment); Thread t1=new Thread(obj1); Thread t2=new Thread(obj2); t1.start(); t2.start(); } };

Output:
BookTicket locked on Train CancelTicket locked on Compartment BookTicket now waiting to lock on compartment CancelTicket now waiting to lock on Train..

The run() method inside the CancelTicket should be changed as shown below to avoid Deadlocks.
public void run() { synchronized(train) { System.out.println("CancelTicket locked on Train"); try { Thread.sleep(200); } catch (InterruptedException e) { } System.out.println("CancelTicket now waiting to lock on compartment.."); synchronized(comp) { System.out.println("CancelTicket locked on Compartment"); } } } };

4.Program to demonstrate the creation of thread groups and some methods which act on thread groups.
class TGroups { public static void main(String[]args) { Reservation3 res=new Reservation3(); Cancellation3 can=new Cancellation3(); ThreadGroup tg=new ThreadGroup("First Group"); Thread t1=new Thread(tg,res,"First thread"); Thread t2=new Thread(tg,res,"Second thread"); ThreadGroup tg1=new ThreadGroup(tg,"SecondGroup"); Thread t3=new Thread(tg1,res,"Third thread"); Thread t4=new Thread(tg1,res,"Fourth thread"); System.out.println("Parent of tg1="+tg1.getParent()); tg1.setMaxPriority(7); System.out.println("Thread Group of t1="+t1.getThreadGroup());

8 System.out.println("Thread Group of t3="+t3.getThreadGroup()); t1.start(); t2.start(); t3.start(); t4.start(); System.out.println("No of threads active in tg="+tg.activeCount()); } };

class Reservation3 extends Thread { public void run() { System.out.println("I am Reservation thread"); } }; class Cancellation3 extends Thread { public void run() { System.out.println("I am Cancellation thread"); } };

Output:
java TGroups Parent of tg1=java.lang.ThreadGroup[name=First Group,maxpri=10] Thread Group of t1=java.lang.ThreadGroup[name=First Group,maxpri=10] Thread Group of t3=java.lang.ThreadGroup[name=SecondGroup,maxpri=7] I am Reservation thread I am Reservation thread I am Reservation thread No of threads active in tg=1 I am Reservation thread

Вам также может понравиться