Download presentation
Presentation is loading. Please wait.
Published byJordan Burke Modified over 8 years ago
1
Java Threads Lilin Zhong
2
Java Threads 1. New threads 2. Threads in the running state 3. Sleeping threads and interruptions 4. Concurrent access problems and solutions
3
Java Threads 5. Signaling with wait, notify, and notifyAll 6. When threads freeze: deadlock 7. Scheduling: problems and solutions 8. The end of the thread
4
Why Thread? Thread Java threads Example: Stockbroker
5
Stockbroker Download last stock prices Check prices for warnings Analyze historical data for company X Time 1 2 3 123
6
New Threads Public void run(); ProcessThreads
7
New Thread Creating a thread by: 1. Extending the Thread class 2. Implementing the Runnable interface
8
Creating a Thread by Extending the Thread Class Declaring public class MyThread extends Thread{ public void run(){ // Your instructions here } Instantiating - MyThread testThread=new MyThread();
9
By Implementing the Runnable Interface Defining - public class MyRunnable implements Runnable{ public void run(){ // Your instructions here} } Instantiating - MyRunnable firstRunnable = new MyRunnable; - Thread testThread = new Thread (firstRunnable);
10
Starting an Instance of a Thread testThread.start();
11
Java Threads 1. New threads 2. Threads in the running state
12
Threads in the Running State Execute run methods concurrently; Cooperate, share resources, compete; Take turns to run; Switch.
13
Java Threads 1. New threads 2. Threads in the running state 3. Sleeping threads and interruptions
14
Sleeping Threads and Interruptions -Thread.sleep(long n); e.g. Thread.sleep(5*60*1000); -sleepingThread.interrupt();
15
Java Threads 1. New threads 2. Threads in the running state 3. Sleeping threads and interruptions 4. Concurrent access problems and solutions
16
Concurrent Access Problems and Solutions - e.g. i++; - bring “i” to register; - add 1 to register; - store register onto “i”. ways to solve the problems: Using volatile to transmit single variables between two threads. Using synchronized to transmit groups of variables among multiple threads.
17
Volatile V setget 1V(1) copy Time V(2)2 copy V V 12 public class transfer{ private Object value; public set(value){ this.value=value; } public Object get(){ return value; } } set get
18
Volatile V V Time 1 2 set get V12 public class transfer{ private volatile Object value; public set(value){ this.value=value; } public Object get(){ return value; } } setget
19
Synchronized Time Thread 1Thread 2 Current ThreadWaiting Thread L1 Synchronized block
20
Synchronized public class StatusInfo{ private float temperature, pressure, nitroConcentration; public synchronized void update (float temperature, float pressure, float nitroConcentration){ this.temperature=temperature; this.pressure=pressure; this.nitroConcentration=nitroConcentration; } public synchronized void analyze(){ if (isDangerousCombination (temperature, pressure, nitroConcentration); stopManufacture(); }
21
Java Threads 1. New threads 2. Threads in the running state 3. Sleeping threads and interruptions 4. Concurrent access problems and solutions 5. Signaling with wait, notify, and notifyAll
22
Signaling With Wait, Notify, and notifyAll Using wait and notify by two interdependent threads Using notifyAll when many threads may be waiting
23
Signaling With Wait, Notify, and notifyAll void wait() Waits for a condition to occur void notify() Notifies a thread that is waiting for a condition that the condition has occurred void notifyAll() Notifies all the threads waiting for a condition that the condition has occurred
24
Wait, Notify synchronized(this){ try{ wait(); }catch(InterruptedException e){} } synchronized(this){ notify(); } L1 Time Current Thread Waiting Thread L1
25
NotifyAll Public class Multiplewriters{ private Object item; public synchronized void write(Object o) throws InterruptedException{ while (item!=null) wait(); item=o; notify(); // single writer, notifying one reader // is sufficient }
26
NotifyAll Public synchronized Object read() throws InterruptedException { while (item==null) wait(); Object myItem=item; item=null; notifyAll(); // multiple readers, // notifyAll ensures writer notification return myItem; }
27
Java Threads 6. When threads freeze: deadlock
28
When Threads Freeze: Deadlock Time Thread 1Thread 2 L1 Current Thread Waiting Thread L2 L1 L2 Blocks here waiting for L1 Blocks here waiting for L2
29
Java Threads 6. When threads freeze: deadlock 7. Scheduling: problems and solutions
30
Scheduling: Problem and Solution When does the current thread lose its turn at CPU: Yield() Thread.yield(); //will give up the turn on the CPU Sleep, wait, or blocked by I/O Priority “time-slicing”
31
Scheduling: Problem and Solution Which thread will be the next to execute? Specify the priority of threads setPriority(int n) n=1 to 10 Main5 Static final ints: MIN_PRIORITY1 NORM_PRIORITY5 MAX_PRIORITY10
32
Java Threads 6. When threads freeze: deadlock 7. Scheduling: problems and solutions 8. The end of the thread
33
The End of The Thread System.exit(n) Returning from run method Throwing an unchecked exception Blocked by I/O others
34
Summary How create threads by extending Thread and by implementing Runnable, and how to start them. How to share information effectively, threads use synchronized blocks of code.
35
Summary How to coordinate activity through time, using wait/notify model. What different thread states ( new, dead) are, when threads go in and out of sleeping, waiting, blocking on I/O, and acquiring lock states.
36
Example: Neko http://www.naviseek.com/book/java21/day10.shtml Neko12.java Neko.html
37
References: Java Threads, 2nd Edition, Scott Oaks & Henry Wong Multithreaded programming with Java technology, Bil Lewis & Daniel J. Berg Teaching yourself Java 1.2 in 21 days, Laura Lemay & Rogers Cadenhead Java How to program, third edition, Deitel & Deitel Java 2 certificate
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.