Multithreading Chapter 9.

Slides:



Advertisements
Similar presentations
Operating Systems: Monitors 1 Monitors (C.A.R. Hoare) higher level construct than semaphores a package of grouped procedures, variables and data i.e. object.
Advertisements

Ade Azurat, Advanced Programming 2004 (Based on LYS Stefanus’s slides) Advanced Programming 2004, Based on LYS Stefanus’s slides Slide 2.1 Multithreading.
CS 5704 Fall 00 1 Monitors in Java Model and Examples.
1 Race Conditions When threads share access to a common object/data, they can conflict with each other and mess up the consistency of the object/data.
1 Condition Synchronization. 2 Synchronization Now that you have seen locks, is that all there is? No, but what is the “right” way to build a parallel.
Multithreading Horstmann ch.9. Multithreading Threads Thread states Thread interruption Race condition Lock Built-in lock java.util.concurrent library.
Chapter 9 (Horstmann’s Book) Multithreading Hwajung Lee.
Multithreading. RHS – SWC 2 What is a thread Inside a single process, multiple threads can be executing concurrently A thread is the execution of (part.
1Quiz Modify HelloWorld2.java; –Remove (or comment out) the following 4 lines: Thread thread1 = new Thread(runnable1); Thread thread2 = new Thread(runnable2);
CS220 Software Development Lecture: Multi-threading A. O’Riordan, 2009.
1 Multithreading. 2 Threads Program units that execute independently; multiple threads run “simultaneously” Virtual machine executes each thread for short.
22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.
Threads A thread is a program unit that is executed independently of other parts of the program A thread is a program unit that is executed independently.
ThreadThread Thread Basics Thread Synchronization Animations.
Multithreading in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Threads II. Review A thread is a single flow of control through a program Java is multithreaded—several threads may be executing “simultaneously” If you.
Parallel Processing (CS526) Spring 2012(Week 8).  Thread Status.  Synchronization in Shared Memory Programming(Java threads ) ◦ Locks ◦ Barriars.
1 CSCD 330 Network Programming Lecture 13 More Client-Server Programming Sometime in 2014 Reading: References at end of Lecture.
1 CSCE3193: Programming Paradigms Nilanjan Banerjee Programming Paradigms University of Arkansas Fayetteville, AR
Multithreading. Chapter Goals To understand how multiple threads can execute in parallel To learn how to implement threads To understand race conditions.
Java Threads 11 Threading and Concurrent Programming in Java Introduction and Definitions D.W. Denbo Introduction and Definitions D.W. Denbo.
Today’s Agenda  Quick Review  Finish Java Threads  The CS Problem Advanced Topics in Software Engineering 1.
111 © 2002, Cisco Systems, Inc. All rights reserved.
Practical OOP using Java Basis Faqueer Tanvir Ahmed, 08 Jan 2012.
1 CMSC 341: Data Structures Nilanjan Banerjee Data Structures University of Maryland Baltimore County
Next week (July 21) –No class –No office hour. Problem Multiple tasks for computer –Draw & display images on screen –Check keyboard & mouse input –Send.
Multithreading : synchronization. Avanced Programming 2004, Based on LYS Stefanus’s slides slide 4.2 Solving the Race Condition Problem A thread must.
CSE 501N Fall ‘09 23: Advanced Multithreading: Synchronization and Thread-Safety December 1, 2009 Nick Leidenfrost.
Practice Session 8 Blocking queues Producers-Consumers pattern Semaphore Futures and Callables Advanced Thread Synchronization Methods CountDownLatch Thread.
Multithreading in Java Sameer Singh Chauhan Lecturer, I. T. Dept., SVIT, Vasad.
In Java processes are called threads. Additional threads are associated with objects. An application is associated with an initial thread via a static.
Multithreading in JAVA
CS 151: Object-Oriented Design November 21 Class Meeting Department of Computer Science San Jose State University Fall 2013 Instructor: Ron Mak
Threads II IS Outline  Quiz  Thread review  Stopping a thread  java.util.Timer  Swing threads javax.swing.Timer  ProgressMonitor.
Li Tak Sing COMPS311F. Threads A thread is a single sequential flow of control within a program. Many programming languages only allow you to write programs.
Concurrency Control 1 Fall 2014 CS7020: Game Design and Development.
CS 152: Programming Language Paradigms April 30 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak.
Threads b A thread is a flow of control in a program. b The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.
CS 151: Object-Oriented Design November 26 Class Meeting Department of Computer Science San Jose State University Fall 2013 Instructor: Ron Mak
Concurrency (Threads) Threads allow you to do tasks in parallel. In an unthreaded program, you code is executed procedurally from start to finish. In a.
1 Threads in Java Jingdi Wang. 2 Introduction A thread is a single sequence of execution within a program Multithreading involves multiple threads of.
CS 151: Object-Oriented Design November 19 Class Meeting Department of Computer Science San Jose State University Fall 2013 Instructor: Ron Mak
Concurrency in Java MD. ANISUR RAHMAN. slide 2 Concurrency  Multiprogramming  Single processor runs several programs at the same time  Each program.
Multithreading. DCS – SWC 2 What is a thread Inside a single process, multiple threads can be executing concurrently A thread is the execution of (part.
Lec 10 agenda >git fetch origin lab10g; > git checkout -b lab10g origin/lab10g; Format/rules for Week 11 Advanced Topics (all beyond the scope of this.
Distributed and Parallel Processing George Wells.
Threads in Java Jaanus Pöial, PhD Tallinn, Estonia.
CSCD 330 Network Programming
Threads in Java Two ways to start a thread
Multithreading / Concurrency
Multi Threading.
Practice Session 8 Lockfree LinkedList Blocking queues
CSE 501N Fall ‘09 21: Introduction to Multithreading
More About Threads.
Threads Chate Patanothai.
ITEC324 Principle of CS III
Threads II IS
Condition Variables and Producer/Consumer
Multithreading.
Condition Variables and Producer/Consumer
Multithreading 2 Lec 24.
Java Based Techhnology
Java Concurrency 17-Jan-19.
Java Concurrency.
Java Concurrency.
Threads and Multithreading
Java Concurrency 29-May-19.
Software Engineering and Architecture
Chapter 9 Multithreading
Java Chapter 3 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

Multithreading Chapter 9

Chapter Topics Thread Basics Thread Synchronization Animations

Threads Thread: program unit that is executed independently Multiple threads run simultaneously Virtual machine executes each thread for short time slice Thread scheduler activates, deactivates threads Illusion of threads running in parallel Multiprocessor computers: threads actually run in parallel

Running Threads Define class that implements Runnable Runnable has one method void run() Place thread action into run method Construct object of runnable class Construct thread from that object Start thread

Running Threads public class MyRunnable implements Runnable { public void run() { thread action } ... Runnable r = new MyRunnable(); Thread t = new Thread(t); t.start();

Thread Example Run two threads in parallel Each thread prints 10 greetings for (int i = 1; i <= 10; i++) { System.out.println(i + ": " + greeting); Thread.sleep(100); } After each printout, sleep for 100 millisec All threads should occasionally yield control sleep throws InterruptedException

Thread Example Ch9/greeting/GreetingProducer.java Ch9/greeting/ThreadTester.java

Thread Example Note: output not exactly interleaved 1: Hello, World! 1: Goodbye, World! 2: Hello, World! 2: Goodbye, World! 3: Hello, World! 3: Goodbye, World! 4: Hello, World! 4: Goodbye, World! 5: Hello, World! 5: Goodbye, World! 6: Hello, World! 6: Goodbye, World! 7: Hello, World! 7: Goodbye, World! 8: Goodbye, World! 8: Hello, World! 9: Goodbye, World! 9: Hello, World! 10: Goodbye, World! 10: Hello, World!

Starting Two Threads

Thread States Each thread has Thread states: new (before start called) priority Thread states: new (before start called) runnable blocked dead (after run method exits)

Thread States

Blocked Thread State Reasons for blocked state: Sleeping Waiting for I/O Waiting to acquire lock (later) Waiting for condition (later) Unblocks only if reason for block goes away

Scheduling Threads Scheduler activates new thread if a thread has completed its time slice a thread has blocked itself a thread with higher priority has become runnable Scheduler determines new thread to run looks only at runnable threads picks one with max priority

Terminating Threads Thread terminates when run exits Sometimes necessary to terminate running thread Don't use deprecated stop method Interrupt thread by calling interrupt Calling t.interrupt() doesn't actually interrupt t; just sets a flag Interrupted thread must sense interruption and exit its run method Interrupted thread has chance to clean up

Sensing Interruptions Thread could occasionally call Thread.currentThread().isInterrupted() sleep, wait throw InterruptedException when thread interrupted . . . and then the interruption status is cleared! More robust: Sleep occasionally, catch exception and react to interruption Recommendation: Terminate run when sensing interruption

Sensing Interruptions public class MyRunnable implements Runnable { public void run() { try { while (...) { do work Thread.sleep(...); } } catch (InterruptedException e) {} clean up }

Thread Synchronization Use bounded queue from chapter 3 Each producer thread inserts greetings Each consumer thread removes greetings Two producers, one consumer

Producer Thread int i = 1; while (i <= greetingCount) { if (!queue.isFull()) { queue.add(i + ": " + greeting); i++; } Thread.sleep((int)(Math.random() * DELAY)); }

Consumer Thread int i = 1; while (i <= greetingCount) { if (!queue.isEmpty()) { Object greeting = queue.remove(); System.out.println(greeting); i++; } Thread.sleep((int)(Math.random() * DELAY)); }

Expected Program Output 1: Hello, World! 1: Goodbye, World! 2: Hello, World! 3: Hello, World! ... 99: Goodbye, World! 100: Goodbye, World!

Why is Output Corrupted? Sometimes program gets stuck and doesn't complete Can see problem better when turning debugging on queue.setDebug(true); Ch9/queue1/ThreadTester.java Ch9/queue1/Producer.java Ch9/queue1/Consumer.java Ch9/queue1/BoundedQueue.java

Race Condition Scenario First thread calls add and executes elements[tail] = anObject; First thread at end of time slice Second thread calls add and executes elements[tail] = anObject; tail++; Second thread at end of time slice First thread executes tail++;

Race Condition Scenario

Locks Thread can acquire lock When another thread tries to acquire same lock, it blocks When first thread releases lock, other thread is unblocked and tries again Two kinds of locks Objects of class implementing java.util.concurrent.Lock interface type, usually ReentrantLock Locks that are built into every Java object

Reentrant Locks aLock = new ReentrantLock(); . . . aLock.lock(); try { protected code } finally { aLock.unlock(); }

Scenario with Locks First thread calls add and acquires lock, then executes elements[tail] = anObject; Second thread calls add and tries to acquire lock, but it is blocked First thread executes tail++; First thread completes add, releases lock Second thread unblocked Second thread acquires lock, starts executing protected code

Deadlocks Not enough to synchronize add, remove if (!queue.isFull()) queue.add(...);   can still be interrupted Must move test inside add method public void add(E newValue) { queueLock.lock(); try { while (queue is full) wait for more space . . . } finally { qeueLock.unlock(); } } Problem: nobody else can call remove

Avoiding Deadlocks Use condition object to manage "space available" condition private Lock queueLock = new ReentrantLock(); private Condition spaceAvailableCondition = queueLock.newCondition(); Call await when condition is not fulfilled: public void add(E newValue) { . . . while (size == elements.length) spaceAvailableCondition.await(); . . . }

Avoiding Deadlocks Waiting thread is blocked Condition object manages set of threads that wait for the condition to change To unblock, another thread must call signalAll on the same condition object Call when state changes public E remove() { . . . E r = elements[head]; . . . spaceAvailableCondition.signalAll(); // Unblock waiting threads return r; } All waiting threads removed from wait set, unblocked Ch9/queue2/BoundedQueue.java

Object Locks Each object has a lock Calling a synchronized method acquires lock of implicit parameter Leaving the synchronized method releases lock Easier than explicit Lock objects public class BoundedQueue<E> { public synchronized void add(E newValue) { . . . } public synchronized E remove() { . . . } . . . }

Object Locks Each implicit lock has one associated (anonymous) condition object Object.wait blocks current thread and adds it to wait set Object.notifyAll unblocks waiting threads public synchronized void add(E newValue) throws InterruptedException { while (size == elements.length) wait(); elements[tail] = anObject; . . . notifyAll(); // notifies threads waiting // to remove elements } Ch9/queue3/BoundedQueue.java

Visualizing Locks Object = phone booth Thread = person Locked object = closed booth Blocked thread = person waiting for booth to open

Visualizing Locks

Algorithm Animation Use thread to make progress in algorithm Display algorithm state Example: Animate Ch9/animation/Sorter.java Sleeps inside compare method Pass custom comparator Comparator<Double> comp = new Comparator<Double>()    {       public void compare(Double d1, Double d2)       {          sleep          return comparison result       }    };

Algorithm Animation Ch9/animation1/ArrayComponent.java Ch9/animation1/AnimationTester.java

Pausing and Running the Animation Want to pause animation until "Run" or "Step" button is clicked Need to coordinate UI thread, animation thread Try to use built-in thread-safe construct in java.util.concurrent Trick: Use a blocking queue Button click adds string "Run" or "Step" to queue Animation thread calls take on the queue, blocks if no string inserted Ch9/animation2/Sorter.java Ch9/animation2/AnimationTester.java