packages packages are containers for classes that are used to keep the class name space...

45
Packages Packages are containers for classes that are used to keep the class name space compartmentalized. . You can define classes inside a package that are not accessible by code outside that package. You can also define class members that are only exposed to other members of the same package.

Upload: amelia-pope

Post on 17-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

PackagesPackages are containers for classes that are used to keep the class name space compartmentalized. . You can define classes inside a package that are not accessible by code outside that package. You can also define class members that areonly exposed to other members of the same package.

Page 2: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Defining a Package• To create a package simply include a package

command as the first statement in a Java source file. The package statement defines a name space in which classes are stored. If you omit the package statement, the class names are put into the default package, which has no name.

• the general form of the package statement:

package pkg;

Page 3: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

Ex: package p1;the .class files for any classes you declare to be

part of p1 must be stored in a directory called p1.

Page 4: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• package p1;• class Balance • {• String name;• double bal;• Balance(String n, double b) • {• name = n;• bal = b;• }• void show()• {• if(bal<0)• System.out.println(name + ": $" + bal);• }• }• class AccountBalance • {• public static void main(String args[])• {• Balance current[] = new Balance[3];• current[0] = new Balance("K. J. Fielding", 123.23);• current[1] = new Balance("Will Tell", 157.02);• current[2] = new Balance("Tom Jackson", -12.33);• for(int i=0; i<3; i++) • current[i].show();• }• }

Page 5: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Threads• A multithreaded program contains two or

more parts that can run concurrently. Each part of such a program is called a thread, and each thread defines a separate path of execution. Thus, multithreading is a specialized form of multitasking.

• there are two distinct types of multitasking:• process-based and • thread-based.

Page 6: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• ProcessBased MultiTasking• A process is, a program that is executing. Thus,

process-based multitasking is the feature that allows your computer to run two or more programs concurrently. Ex:run the Java compiler at the same time that you are using a text editor.

• thread-based multitaskingIn a thread-based multitasking environment, the thread

is the smallest unit of dispatchable code. This means that a single program can perform two or more tasks simultaneously. Ex: a text editor can format text at the same time that it is printing,

Page 7: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Threads exist in several states. A thread can be running. It can be ready to run as soon as it gets CPU time. A running thread can be suspended, which temporarily suspends its activity. A suspended thread can then be resumed, allowing it to pick up where it left off. A thread can be blocked when waiting for a resource. At any time, a thread can be terminated, which halts its execution immediately. Once terminated, a thread cannot be resumed.

Page 8: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

Runnable

Running

Terminated

Non Runnable

New

Page 9: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• The Main Thread• When a Java program starts up, one thread begins running

immediately. This is called the main thread of your program, because it is the one that is executed when your program begins.

It is the thread from which other "child" threads will be spawned.

It must be the last thread to finish execution. When the main thread stops, your program terminates.

• the main thread can be controlled through a Thread object. To do so, you must obtain a reference to it by callingthe method currentThread( ), which is a public static member of Thread.

Page 10: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadDemo {

public static void main(String args[]) { Thread t = Thread.currentThread();

System.out.println("Current thread: " + t);t.setName("My Thread");System.out.println("After name change: " + t);System.out.println("After name change: " + t.getName());for(int n = 5; n > 0;n--)

{System.out.println(n);try{Thread.sleep(1000);}catch(InterruptedException e){}

}

}}

Page 11: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• static Thread currentThread( )• Returns the currentThread

• static void sleep(long milliseconds) throws InterruptedException

• Suspend the thraed for milliseconds

. static void sleep(long milliseconds, int nanoseconds) throws InterruptedException

• final void setName(String threadName)• Sets the Name of the Thread

• final String getName( )• Returns the name of the Thread.• Note : InterruptedException is a Checked Exception

Page 12: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Creating a Thread• Java defines two ways in which this can be accomplished:By implementing the Runnable interface.By extending the Thread class, itself.• Implementing Runnablecreate a class that implements the Runnable interface. You can

construct a thread on any object that implements Runnable. To implement Runnable, a class need only implement a single method called run( ), which is declared like

• public void run( )run( ) establishes the entry point for another, concurrent thread

of execution within your program. This thread will endwhen run( ) returns.

Page 13: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class thread implements Runnable{ Thread t; n thread(){ t=new Thread(this,"Nisha"); t.start();}public void run()

{ for(int i=0;i<5;i++) { System.out.println("nish"+i);

try{Thread.sleep(1000);}catch(InterruptedException e) {

} }}}

class ThreadDemo {public static void main(String args[]) { Thread t = Thread.currentThread();

t.setName("My Thread"); thread T =new thread();

for(int n = 5; n > 0;n--) { System.out.println(n);try{ Thread.sleep(1500);}catch(InterruptedException e){}}

}}

Page 14: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• The methods in Thread ClassConstructorThread(Runnable threadOb, String threadName)

threadOb is an instance of a class that implements the Runnable interface. The name of the new

thread is specified by threadName.• void start( )• start( ) executes a call to run() and the thread

started running

Page 15: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Extending Thread• The second way to create a thread is to create

a new class that extends Thread, andthen to create an instance of that class. The

extending class must override the run( )method, which is the entry point for the new

thread. It must also call start( ) to beginexecution of the new thread.

Page 16: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Threadclass extends Thread{ Threadclass()

{super("Nisha");start();System.out.println(getName());

}public void run(){ for(int i=5;i>0;i--)

{ System.out.println(getName()+i);try{sleep(1000);}catch(InterruptedException e){ }

}}}

Page 17: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadDemo{

public static void main(String a[]){

new Threadclass();System.out.println(Thread.currentThread().getName());for(int i=0;i<=5;i++){System.out.println("Main"+i);

try{Thread.sleep(1500);}catch(InterruptedException e){ }

}}

}

Page 18: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Choosing an Approach• it is probably best to implement Runnable. • Thread class is having lot of methods in

which only the run method is overriding.

Page 19: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Threadclass implements Runnable{ Thread t;

String s; Threadclass(String s1)

{ s=s1;t=new Thread(this,s);System.out.println(t.getName());t.start();

}public void run(){ for(int i=5;i>0;i--)

{ System.out.println(s+i);try{Thread.sleep(100);}catch(InterruptedException e){ }

}System.out.println("Finished"+s);

}}

Page 20: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadDemo{ public static void main(String a[])

{ new Threadclass("First");new Threadclass("Second");new Threadclass("Third");System.out.println(Thread.currentThread().getName());for(int i=0;i<=5;i++){ System.out.println("Main"+i);

try{Thread.sleep(2000);}catch(InterruptedException e){ }

}System.out.println("FinishedMain");}

}

Page 21: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• final boolean isAlive( )The isAlive( ) method returns true if the thread

upon which it is called is still running. Itreturns false otherwise.• final void join( ) throws InterruptedExceptionThis method waits until the thread on which it is

called terminates.

Page 22: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Threadclass implements Runnable{ Thread t;

String s; Threadclass(String s1)

{ s=s1;t=new Thread(this,s);System.out.println(t.getName());t.start();

}public void run(){ for(int i=5;i>0;i--)

{ try{System.out.println(s+i);Thread.sleep(100);}catch(InterruptedException e){ }

}System.out.println("Finished"+s);

}}

Page 23: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadDemo{ public static void main(String a[])

{ Threadclass Tc1,Tc2,Tc3 ;Tc1=new Threadclass("First");Tc2=new Threadclass("Second");Tc3=new Threadclass("Third");System.out.println(Thread.currentThread().getName());System.out.println(Thread.currentThread().isAlive());System.out.println(Tc1.t.isAlive());System.out.println(Tc2.t.isAlive());System.out.println(Tc3.t.isAlive());try{ Tc1.t.join();

System.out.println(Tc1.t.isAlive());Tc2.t.join();System.out.println(Tc2.t.isAlive());Tc3.t.join();

}catch(Exception e){ }System.out.println(Tc3.t.isAlive());System.out.println("Finished Main");

}}

Page 24: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Thread PrioritiesIn theory, higher-priority threads get more CPU

time than lower-priority threads. In a preemptive environment A higher-priority thread can preempt a lower-priority one.when a lower-priority thread is running

and a higher-priority thread resumes (from sleeping or waiting on I/O, for example), it will

preempt the lower-priority thread. To set a thread's priority, use the setPriority( ) method, which is a member of Thread.

Page 25: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• final void setPriority(int level)The value of level must be within the range

MIN_PRIORITY and MAX_PRIORITY. Currently, these values are 1 and 10, respectively. To return a thread to default priority, specify NORM_PRIORITY,

which is currently 5. These priorities are defined as final variables within Thread.

• final int getPriority( ) To obtain the current priority

Page 26: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadClass implements Runnable{ Thread t;

private volatile boolean ok= true; int count;ThreadClass(int p,String s){ t=new Thread(this,s);

t.setPriority(p);count=0;ok=true;

}public void run(){ while(ok) { count++; }} void start(){ t.start(); } void stop(){ ok=false; }

}

Page 27: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class ThreadDemo{ public static void main(String a[])

{ThreadClass t1=new ThreadClass(Thread.NORM_PRIORITY-2,"FIRST");ThreadClass t2=new ThreadClass(Thread.NORM_PRIORITY+2,"Secd");t1.start();t2.start();for(int i=0;i<5;i++){ System.out.println("main"+i);

try{ Thread.sleep(500); }catch(InterruptedException e){ }

}t1.stop();t2.stop();try{ t1.t.join(); t2.t.join(); }catch(InterruptedException e){ }System.out.println(t1.count);System.out.println(t2.count);

}}

Page 28: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

The higher-priority thread got approximately 90 percent of the CPU time.the use of volatile, prevents Java from optimizing the code of the loop in

such a way that the value of running is held in a register of the CPU and not necessarily reexamined with each iteration.

SynchronizationWhen two or more threads need access to a shared resource, they need

some way to ensure that the resource will be used by only one thread at a time. The process by which this is achieved is called synchronization.

Key to synchronization is the concept of the monitor (also called a semaphore). A monitor is an object that is used as a mutually exclusive lo ck, or mutex. Only one thread can own a monitor at a given time. To enter an object's monitor, just call a method that has been modified with the synchronized keyword. While a thread is inside a synchronized

method, all other threads that try to call it on the same instance have to wait.

Page 29: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Callme { synchronized void call(String msg)

{System.out.print("[" + msg);try {

Thread.sleep(1000);} catch(InterruptedException e) {System.out.println("Interrupted");

}System.out.println("]");

}}

Page 30: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Caller implements Runnable { String msg;

Callme target;Thread t;public Caller(Callme targ, String s) { target = targ;

msg = s;t = new Thread(this);t.start();

}public void run() { target.call(msg);}}

Page 31: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Synch {

public static void main(String args[]) { Callme target = new Callme();

Caller ob1 = new Caller(target, "Hello");Caller ob2 = new Caller(target, "Synchronized");Caller ob3 = new Caller(target, "World");try {

ob1.t.join();ob2.t.join();ob3.t.join();} catch(InterruptedException e) {System.out.println("Interrupted");

}}}o/p• [Hello]• [Synchronized]• [World]

Page 32: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

How can access to an object of a class besynchronized?put calls to the methods defined by this class inside a

synchronized block.This is the general form of the synchronized

statement:synchronized(object) {

// statements to be synchronized}Here, object is a reference to the object being

synchronized.

Page 33: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Callme {

void call(String msg) {

System.out.print("[" + msg);try {

Thread.sleep(1000);} catch (InterruptedException e)

{System.out.println("Interrupted");}

System.out.println("]");}}

Page 34: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Caller implements Runnable { String msg;

Callme target;Thread t;public Caller(Callme targ, String s) { target = targ;

msg = s;t = new Thread(this);t.start();

}public void run() { synchronized(target)

{ target.call(msg);}

}}

Page 35: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Synch1 { public static void main(String args[])

{ Callme target = new Callme();Caller ob1 = new Caller(target, "Hello");Caller ob2 = new Caller(target, "Synchronized");Caller ob3 = new Caller(target, "World");try {

ob1.t.join();ob2.t.join();ob3.t.join();

} catch(InterruptedException e) {};}

}}

Page 36: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

• Interthread Communicationinterface

ProducerThreadConsumerThread

consider the classic queuing problem, where one thread is producing some data and another is consuming it the producer has to wait until the consumer is finished before it generates more data.But In a polling system, the consumer would waste many CPU cycles while it waited for the producer to produce. Once the producer was finished, it would start polling,wasting more CPU cycles waiting for the consumer to finish, and so on. Clearly, this situation is undesirable.

To avoid this, Java includes an elegant interprocesscommunication mechanism using the wait( ), notify( ), and notifyAll( ) methods. These methods are implemented as final methods in Object, so all classes have them. All three methods can be called only from within a synchronized method.

Page 37: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

final void wait( ) throws InterruptedExceptiontells the calling thread to give up the monitor and go to sleep until some other thread enters the same monitor and calls notify( ).

final void notify( )wakes up the first thread that called wait( ) on the same object.final void notifyAll( )wakes up all the threads that called wait( ) on the same object.

Thehighest priority thread will run first.These methods are declared within Object class

Page 38: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Q { int n;

boolean flag=false;synchronized void get() { if (!flag)

try{ wait();}catch(Exception e){}System.out.println("Got: " + n);flag=false;notify();

}synchronized void put(int n) { if (flag)

try{ wait(); }catch(Exception e){}this.n = n;System.out.println("Put: " + n);flag=true;notify();

}}

Page 39: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Producer implements Runnable { Q q;

Producer(Q q) { this.q = q;

new Thread(this, "Producer").start();}public void run(){ int i = 0;

while(true) { q.put(i++); }}

}class Consumer implements Runnable { Q q;

Consumer(Q q) { this.q = q;

new Thread(this, "Consumer").start();}public void run() { while(true)

{ q.get(); }}}

Page 40: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class PC {

public static void main(String args[]) { Q q = new Q();

new Producer(q);new Consumer(q);System.out.println("Press Control-C to

stop.");

}}

Page 41: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class Q { int n;

synchronized void get() { System.out.println("Got: " + n);}synchronized void put(int n) { this.n = n;

System.out.println("Put: " + n);}}

Page 42: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

DeadlockDeadlock occurs when two threads have a circular

dependency on a pair of synchronized objects. For example, suppose one thread enters the monitor on object X and another thread enters the monitor on object Y. If the thread in X tries to call any synchronized method on Y, it will block as expected. However, if the thread in Y, in turn,tries to call any synchronized method on X, the thread waits forever, because to access X, it would have to release its own lock on Y so that the first thread could complete.

Page 43: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class A{

synchronized void display(B b){ System.out.println("Entered A display");

try{Thread.sleep(1000);}catch(InterruptedException e){}

b.display1();}synchronized void display1(){

System.out.println("Entered A Display1");}

}

Page 44: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that

class B implements Runnable{ Thread t; A a1;

B(A a){ t=new Thread(this); a1=a;

t.start(); display(a1);}public void run(){ a1.display(this); }synchronized void display(A a){ System.out.println("Entered B Display");

try{Thread.sleep(1000);}catch(InterruptedException e){}a.display1();

}synchronized void display1(){ System.out.println("Entered Display1"); }public static void main(String a[]){ A a1=new A();

B b1=new B(a1);}}

Page 45: Packages Packages are containers for classes that are used to keep the class name space compartmentalized.. You can define classes inside a package that