Presentation is loading. Please wait.

Presentation is loading. Please wait.

1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 = new Thread(runnable1); Thread thread2 = new Thread(runnable2);

Similar presentations


Presentation on theme: "1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 = new Thread(runnable1); Thread thread2 = new Thread(runnable2);"— Presentation transcript:

1 1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 = new Thread(runnable1); Thread thread2 = new Thread(runnable2); thread1.start(); thread2.start(); –Do this: runnable1.run(); runnable2.run(); Describe the result of the modified program and explain why the result looks like that (why it is different from the result of the original Code 2).

2 2 Thread State Runnable Blocked new New start() I/O op completion or thread sync done I/O operation or wait for thread sync (lock) Terminated Exits run() or Explicit thread termination Waiting sleep() join() wait() await() notify() notifyAll() signal() signalAll() interruption Timed Waiting sleep() join() wait() await() notify() notifyAll() signal() signalAll() interruption

3 3 New –A Thread object is created. start() has not called on the object yet. Runnable –Java does not distinguish runnable and running. A running thread is still in the Runnable state. Dead –A thread automatically dies when run() returns.

4 4 public class Thread { public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED } public Thread.State getState() public boolean isAlive() Alive –in the Runnable, Blocked, Waiting or Timed Waiting state. –isAlive() is usually used to poll a thread to see if it is terminated.

5 5GreetingThreadRunner.java Output: –NEW –false –RUNNABLE –true –Wed Mar 28 04:25:01 EDT 2007 Goodbye World –Wed Mar 28 04:25:01 EDT 2007 Hello World –Wed Mar 28 04:25:02 EDT 2007 Hello World –Wed Mar 28 04:25:02 EDT 2007 Goodbye World –Wed Mar 28 04:25:03 EDT 2007 Hello World –Wed Mar 28 04:25:03 EDT 2007 Goodbye World –…… –TERMINATED –false

6 6 Thread Termination Implicit termination –A thread triggers its own death when run() returns. Once a thread starts executing run(), it continues execution until it returns. Explicit termination –A thread is terminated by another thread. when a certain condition is met. –e.g. web browser –Two ways Setting a flag Interrupting a thread

7 7 Thread Termination Flag Stop a thread by setting a flag to signal that the thread should stop. The thread periodically checks out the flag to determine if it should exit.

8 8SummationRunnable.java

9 9 Main threadThread t t.start() Printing 10 Sleeps for 1 sec t.setDone() Prints “stopped by main()” Prints #s t.join() Waits for t.run() to return. Goes to the Waiting state. t.start() Printing 9, 8, 7, …

10 10 Output: –# –10 –# –stopped by main()! –9 –8 –7 –6 –5 –4 –3 –2 –1 –0 –print done

11 11 Thread Interruption Interrupt a thread to minimize this delay. –Signals a thread that the thread should exit. –Thread.interrupt()

12 12InterruptableTask.java

13 13InterruptableTask.java Main threadThread t t.start() Printing 1 Sleeps for 1 sec Goes to the Waiting state. t.interrupt() Interrupted! Goes to the Runnable state. Catches InterruptedException A try-catch clause is always necessary to catch InterruptedException, when using sleep().

14 14InterruptableTask2.java

15 15InterruptableTask2.java Main threadThread t t.start() Keep printing 1s t.interrupt() Interrupted! Prints 4 Sleeps for 2 sec Goes to the Waiting state. Interrupt() does not stop a target thread.

16 16SummationRunnableInterruptable.java

17 17 Main threadThread t t.start() Prints 10 t.interrupt() Prints #s t.join() Waits for t.run() to return. Goes to the Waiting state. t.start() Printing 9, 8, 7, … Sleeps for 1 sec Goes to the Waiting state. Interrupted! Goes to the Runnable state. Catches InterruptedException

18 18 Output –# –10 –# –interrupted by main()! –9 –8 –7 –6 –5 –4 –3 –2 –1 –0 –print done

19 19 SummationRunnable.java and SummationRunnableInterruptable.java t.start() Prints 10 t.interrupt() t.join() t.start() Printing 9, 8, 7, … Sleeps for 1 sec Goes to the Waiting state. Interrupted! Goes to the Runnable state. Catches InterruptedException t.start() Printing 10 Sleeps for 1 sec t.setDone() Prints “stopped by main()” t.join() t.start() Printing 9, 8, 7, …

20 20 Stack and Frames User stack (Java stack) –One stack per thread –A set of blocks called frames. Frame –associated with a method call. –Pushed when a method is called. –Poped when a method returns. Multi-threaded process TCB U K Stacks U ProgU dataOS Res thread TCB U K Stacks thread PCB TCB U K Stacks thread – Contains –a table of local variables of the associated method –an operand stack containing the values of the partial results of the method –Program counter that points to the Java bytecode instruction currently being executed.

21 21 public class Thread { static void dumpStack() public StackTraceElement[] getStackTrace() public StackTraceElement[] getAllStackTrace()

22 22InterruptableTask3.java Output: –1 –3 –4 –java.lang.Exception: Stack trace –at java.lang.Thread.dumpStack(Thread.java:1176) –at cs681.threads.InterruptableTask3.run(InterruptableTask3.java:17) –at java.lang.Thread.run(Thread.java:613)


Download ppt "1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 = new Thread(runnable1); Thread thread2 = new Thread(runnable2);"

Similar presentations


Ads by Google