1 CMSC 132: Object-Oriented Programming II Threads in Java!Department of Computer Science!University of Maryland, College Park!2 Problem ! Multiple tasks for computer ! Draw & display images on screen ! Check keyboard & mouse input ! Send & receive data on network ! Read & write files to disk ! Perform useful computation (editor, browser, game) ! How does computer do everything at once? ! Multitasking ! Multiprocessing3 Multitasking (Time-Sharing) ! Approach ! Computer does some work on a task ! Computer then quickly switch to next task ! Tasks managed by operating system (scheduler) ! Computer seems to work on tasks concurrently ! Can improve performance by reducing waiting4 Multitasking Can Aid Performance ! Single task ! Two tasks5 Multiprocessing (Multithreading) ! Approach ! Multiple processing units (multiprocessor) ! Computer works on several tasks in parallel ! Performance can be improved 4096 processor Cray X1 32 processor Pentium Xeon Dual-core AMD Athlon X26 Perform Multiple Tasks Using… 1. Process ! Definition – executable program loaded in memory ! Has own address space ! Variables & data structures (in memory) ! Each process may execute a different program ! Communicate via operating system, files, network ! May contain multiple threads7 Perform Multiple Tasks Using… 2. Thread ! Definition – sequentially executed stream of instructions ! Shares address space with other threads ! Has own execution context ! Program counter, call stack (local variables) ! Communicate via shared access to data ! Multiple threads in process execute same program ! Also known as “lightweight process”8 Motivation for Multithreading 1. Captures logical structure of problem ! May have concurrent interacting components ! Can handle each component using separate thread ! Simplifies programming for problem ! Example Web Server uses threads to handle … Multiple simultaneous web browser requests9 Motivation for Multithreading 2. Better utilize hardware resources ! When a thread is delayed, compute other threads ! Given extra hardware, compute threads in parallel ! Reduce overall execution time ! Example Multiple simultaneous web browser requests… Handled faster by multiple web servers10 Multithreading Overview ! Motivation & background ! Threads ! Creating Java threads ! Thread states ! Scheduling ! Synchronization ! Data races ! Locks ! Deadlock11 Programming with Threads ! Concurrent programming ! Writing programs divided into independent tasks ! Tasks may be executed in parallel on multiprocessors ! Multithreading ! Executing program with multiple threads in parallel ! Special form of multiprocessing12 Creating Threads in Java ! Need to specify work performed by thread ! Two approaches 1. Runnable interface public interface Runnable { public void run(); // work ⇒ thread } 2. Extending Thread class public class Thread extends Object { … }13 Thread Class public class Thread extends Object implements Runnable { public Thread(); public Thread(String name); // Thread name public Thread(Runnable R); // Thread ⇒ R.run() public Thread(Runnable R, String name); public void run(); // if no R, work for thread public void start(); // begin thread execution ... }14 More Thread Class Methods public class Thread extends Object { … public static Thread currentThread() public String getName() public void interrupt() public boolean isAlive() public void join() public void setDaemon() public void setName() public void setPriority() public static void sleep() public static void yield() }15 Creating Threads in Java ! Runnable Approach 1. Define class implementing Runnable interface public interface Runnable { public void run( ); } 2. Put work to be performed in run( ) method 3. Create instance of the “worker” class 4. Create thread to run it ! Create Thread object ! Pass worker object to Thread constructor ! Or hand the worker instance to an executor ! Alternative methods for running threads16 Creating Threads in Java ! Example public class MyT implements Runnable { public void run( ) { … // work for thread } } Thread t = new Thread(new MyT( )); // create thread t.start(); // begin running thread … // thread executing in parallel17 Alternative Thread Creation Approach ! Thread Class Approach ! Extend Thread class and override run method ! Not recommended ! Example public class MyT extends Thread { public void run( ) { … // work for thread } } MyT t = new MyT( ) ; // create thread t.start( ); // begin running thread … // thread executing in parallel18 Why Not Recommended? ! Not a big problem for getting started ! But a bad habit for industrial strength development ! Methods of worker and Thread class intermixed ! Hard to migrate to more efficient approaches ! Thread Pools19 Creating Threads in Java ! Note ! Thread starts executing only if start() is called ! Runnable is interface ! So it can be implemented by any class ! Required for multithreading in applets20 Threads – Thread States ! Java thread can be in one of these states ! New – thread allocated & waiting for start() ! Runnable – thread can begin execution ! Running – thread currently executing ! Blocked – thread waiting for event (I/O, etc.) ! Dead – thread finished ! Transitions between states caused by ! Invoking methods in class Thread ! new(), start(), yield(), sleep(), wait(), notify()… ! Other (external) events ! Scheduler, I/O, returning from run()…21 Threads – Thread States ! State diagram runnable scheduler new dead running blocked new start terminate IO, sleep, wait, join yield, time slice notify, notifyAll, IO complete, sleep expired, join complete Running is a logical state → indicates runnable thread is actually running22 Daemon Threads ! Java threads types ! User ! Daemon ! Provide general services ! Typically never terminate ! Call setDaemon() before start() ! Program termination
View Full Document