1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 =...
-
date post
20-Dec-2015 -
Category
Documents
-
view
217 -
download
0
Transcript of 1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 =...
1
QuizQuiz
• 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
Thread StateThread State
Runnable
Blocked
newNew
start()
I/O op completionor thread sync done
I/O operation or wait for thread sync (lock)
Terminated
Exits run() orExplicit threadtermination
Waiting
sleep()join()wait()await()
notify()notifyAll()signal()signalAll()interruption
TimedWaitingsleep()
join()wait()await()
notify()notifyAll()signal()signalAll() interruption
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
• 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
GreetingThreadRunner.javaGreetingThreadRunner.java
• Output:– NEW– NEW– false– false– RUNNABLE– RUNNABLE– true– 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– TERMINATED– false– false
6
Thread TerminationThread 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
Thread Termination FlagThread 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.
9
Main thread Thread t
t.start()
Printing 10
Sleeps for 1 sect.setDone()
Prints “stopped bymain()”
Prints #s
t.join()Waits for t.run()to return. Goes to theWaiting state.
t.start()
Printing 9, 8, 7, …
11
Thread Interruption Thread Interruption
• Interrupt a thread to minimize this delay. – Signals a thread that the thread should exit.– Thread.interrupt()
13
InterruptableTask.javaInterruptableTask.java
Main thread Thread t
t.start()
Printing 1
Sleeps for 1 secGoes to the Waitingstate.t.interrupt()
Interrupted!Goes to the Runnablestate.CatchesInterruptedException
A try-catch clause is always necessary tocatch InterruptedException, when using sleep().
15
InterruptableTask2.javaInterruptableTask2.java
Main thread Thread t
t.start()
Keep printing 1s
t.interrupt()
Interrupted!
Prints 4
Sleeps for 2 secGoes to the Waitingstate.
Interrupt() does not stop a target thread.
17
Main thread Thread t
t.start()
Prints 10
t.interrupt()
Prints #s
t.join()Waits for t.run()to return. Goes to theWaiting state.
t.start()
Printing 9, 8, 7, …
Sleeps for 1 secGoes to the Waitingstate.
Interrupted!Goes to the Runnablestate.CatchesInterruptedException
19
SummationRunnable.java SummationRunnable.java andand
SummationRunnableInterruptable.javaSummationRunnableInterruptable.javat.start()
Prints 10
t.interrupt()
t.join()
t.start()
Printing 9, 8, 7, …
Sleeps for 1 secGoes to the Waitingstate.
Interrupted!Goes to the Runnablestate.CatchesInterruptedException
t.start()
Printing 10
Sleeps for 1 sect.setDone()
Prints “stopped bymain()”
t.join()
t.start()
Printing 9, 8, 7, …
20
Stack and FramesStack 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 Prog U data OS 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
• public class Thread { static void dumpStack() public StackTraceElement[] getStackTrace() public StackTraceElement[] getAllStackTrace()