Java, Java, Java Object Oriented Problem Solving Chapter 13: Threads and Concurrent Programming.

Slides:



Advertisements
Similar presentations
Concurrent Programming Abstraction & Java Threads
Advertisements

1 CSC321 §2 Concurrent Programming Abstraction & Java Threads Section 2 Concurrent Programming Abstraction & Java Threads.
Threads  A thread is single sequence of executable statements within a program  eg.) a typical application is a thread, with the flow of control beginning.
JAVA, JAVA, JAVA Object-Oriented Problem Solving Ralph Morelli | Ralph Walde Trinity College Hartford, CT presentation slides for published by Prentice.
JAVA, JAVA, JAVA Object-Oriented Problem Solving Ralph Morelli Trinity College Hartford, CT presentation slides for published by Prentice Hall Second Edition.
Unit 141 Threads What is a Thread? Multithreading Creating Threads – Subclassing java.lang.Thread Example 1 Creating Threads – Implementing java.lang.Runnable.
G52CON: Concepts of Concurrency Lecture 2 Processes & Threads Chris Greenhalgh School of Computer Science
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved L19 (Chapter 24) Multithreading.
Multithreading Why multi-threads Defining and creating threads An example with two threads Life cycle of a thread An example with user interface Problem.
CSE S. Tanimoto Java Threads 1 Java Threads (Outline) Motivation The class Thread Example program: ThreadRace The Runnable interface Example: Clock.
CS220 Software Development Lecture: Multi-threading A. O’Riordan, 2009.
1 Threads (Part I) Introduction to Threads and Concurrency Overview  Introduction to Threads of Computation  Creating Threads in java an Example  Thread.
Definitions Process – An executing program
Multithreading in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Java Threads CS Introduction to Operating Systems.
Multithreading in Java Nelson Padua-Perez Bill Pugh 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.
A Bridge to Your First Computer Science Course Prof. H.E. Dunsmore Concurrent Programming Threads Synchronization.
EE2E1. JAVA Programming Lecture 8 Multi-threading.
Chapter 15 Multithreading F Threads Concept  Creating Threads by Extending the Thread class  Creating Threads by Implementing the Runnable Interface.
Java Programming, Second Edition Chapter Seventeen Multithreading and Animation.
Lecture 5 : JAVA Thread Programming Courtesy : MIT Prof. Amarasinghe and Dr. Rabbah’s course note.
Online Appointment Book Implement a Client/Server application for an online appointment book. Client should be a Graphical User Interface application.
REVIEW On Friday we explored Client-Server Applications with Sockets. Servers must create a ServerSocket object on a specific Port #. They then can wait.
Dr. R R DOCSIT, Dr BAMU. Basic Java : Multi Threading 2 Objectives of This Session State what is Multithreading. Describe the life cycle of Thread.
111 © 2002, Cisco Systems, Inc. All rights reserved.
Java Threads. What is a Thread? A thread can be loosely defined as a separate stream of execution that takes place simultaneously with and independently.
1 Web Based Programming Section 8 James King 12 August 2003.
A Guide to Advanced Java Faculty:Nguyen Ngoc Tu. Concurrent programming in Java How to make all things run-able?
Concurrent Programming and Threads Threads Blocking a User Interface.
Multithreading in Java Sameer Singh Chauhan Lecturer, I. T. Dept., SVIT, Vasad.
Introduction to Threads Session 01 Java Simplified / Session 14 / 2 of 28 Objectives Define a thread Define multithreading List benefits of multithreading.
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
Java Thread and Memory Model
Java the UML Way version Only to be used in connection with the book "Java the UML Way", by Else Lervik and.
15.1 Threads and Multi- threading Understanding threads and multi-threading In general, modern computers perform one task at a time It is often.
Concurrency Control 1 Fall 2014 CS7020: Game Design and Development.
Concurrent Computing CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
Multi-Threading in Java
Multithreaded programming  Java provides built-in support for multithreaded programming. A multithreaded program contains two or more parts that can run.
Multithreading. Multithreaded Programming A multithreaded program contains two or more parts that can run concurrently. Each part of such a program is.
Threads in Java Threads Introduction: After completing this chapter, you will be able to code your own thread, control them efficiently without.
Thread A thread represents an independent module of an application that can be concurrently execution With other modules of the application. MULTITHREADING.
Multithreading. Multitasking The multitasking is the ability of single processor to perform more than one operation at the same time Once systems allowed.
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.
Chapter 13: Multithreading The Thread class The Thread class The Runnable Interface The Runnable Interface Thread States Thread States Thread Priority.
Concurrency in Java MD. ANISUR RAHMAN. slide 2 Concurrency  Multiprogramming  Single processor runs several programs at the same time  Each program.
Java Thread Programming
Multithreaded applets
Multithreading / Concurrency
Multithreading Lec 23.
Chapter 13: Multithreading
Multi Threading.
Java Multithreading.
Multithreading.
Object-Orientated Analysis, Design and Programming
Chapter 19 Java Never Ends
Threads Chate Patanothai.
Definitions Concurrent program – Program that executes multiple instructions at the same time. Process – An executing program (the running JVM for Java.
Java Based Techhnology
Multithreaded Programming
Java Threads (Outline)
Java Threads (Outline)
Java Thread.
Chapter 15 Multithreading
Computer Science 2 06A-Java Multithreading
Multithreading in java.
Threads and Multithreading
Java Chapter 3 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

Java, Java, Java Object Oriented Problem Solving Chapter 13: Threads and Concurrent Programming

Objectives Understand the concept of a thread. Know how to design and write multithreaded programs. Be able to use the Thread class and the Runnable interface. Understand the life-cycle of a thread.

What Is a Thread? A thread (or thread of control) is a sequence of executable statements within a program. Java Application: starts at main() and executes statements in sequence. The Java Virtual Machine in multi- threaded -- it has more than one thread executing. Garbage collector thread -- a JVM thread to collect memory of discarded objects.

Concurrent Execution of Threads Multitasking is the technique of concurrently executing several tasks within a program. On a sequential computer the threads share the single CPU (Central Processing Unit). Time slicing -- each thread alternatively gets a slice (quantum) of the CPU's time.

Multithreaded Numbers Each thread prints its ID number 10 times. NumberThread overrides Thread.run(). public class NumberThread extends Thread { int num; public NumberThread(int n) { num = n; } public void run() { for (int k=0; k < 10; k++) { System.out.print(num); } //for } // run() } // NumberThread When a thread is started, it executes its run() method.

Starting Multiple Threads Create 5 NumberThreads and start each one. public class Numbers { public static void main(String args[]) { NumberThread number1, number2, number3, number4, number5; number1 = new NumberThread(1); number1.start(); number2 = new NumberThread(2); number2.start(); number3 = new NumberThread(3); number3.start(); number4 = new NumberThread(4); number4.start(); number5 = new NumberThread(5); number5.start(); } // main() } // Numbers Output: The threads run in the order they were started

Starting Multiple Threads The order and timing of threads is unpredictable

From the Java Library: The Thread Class public class Thread extends Object implements Runnable { // Constructors public Thread(); public Thread(Runnable target); public Thread( String name ); // Class methods public static native void sleep(long ms) throws InterruptedException; public static native void yield(); // Instance methods public final String getName(); public final int getPriority(); public void run(); // Only method of runnable interface public final void setName(); public final void setPriority(); public synchronized native void start(); public final void stop(); }

A Thread is a Runnable Object A Thread can be passed a Runnable object. public class NumberPrinter implements Runnable { int num; public NumberPrinter(int n) { num = n; } public void run() { for (int k=0; k < 10; k++) System.out.print(num); } // run() } // NumberPrinter A Runnable object implements run(). Thread number1; number1 = new Thread(new NumberPrinter(1)); number1.start(); Create a Runnable object.

Thread Control setPriority(int) sets a thread’s priority to an value between Thread.MIN_PRIORITY and Thread.MAX_PRIORITY. public NumberThread(int n) { num = n; setPriority(n); } for (int k = 0; k < ; k++) if (k % == 0) System.out.print(num); Set NumberThread’s priority to its ID number. Run 2 million iterations, printing on every million. Threads run in priority order.

Design Issues The Runnable interface lets you turn an existing class into a thread. A higher priority thread will preempt threads of lower priority. Thread implementation is platform dependent. A high-priority thread that never gives up the CPU can starve lower-priority threads.

Forcing Threads to Sleep The sleep() method causes the thread to yield for a fixed amount of real time. For example, a revised NumberPrinter.run() public void run() { for (int k=0; k < 10; k++) { try { Thread.sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) { System.out.println(e.getMessage()); } System.out.print(num); } // for } // run() Sleep up to1000 milliseconds Threads run in random order.

The Asynchronous Nature of Threads Threads are asynchronous -- their timing and order of execution is unpredictable. It is not possible to determine when a thread thread might be preempted. int N = 5 + 3; Single Java Statement (1) Fetch 5 from memory and store it in register A. (2) Add 3 to register A. (3) Assign the value in register A to N. Several Machine Instructions Where preemptions could occur.

Case Study: Improving Responsiveness A multithreaded program can be executing in a loop and still respond to user input. Test User Response: Stop the program from drawing random dots as soon as the first red dot appears. Report the number of red dots.

Design: RandomDot Applet Problem Decomposition RandomDotApplet -- manages GUI. Dotty -- contains draw() and clear() Initial Definition RandomDotApplet import java.awt.*; import javax.swing.*; // Import Swing classes import java.awt.event.*; public class RandomDotApplet extends JApplet implements ActionListener{ public final int NDOTS = 10000; private Dotty dotty; // The drawing class private JPanel controls = new JPanel(); private JPanel canvas = new JPanel(); private JButton draw = new JButton("Draw"); private JButton clear = new JButton("Clear"); } // RandomDotApplet Dotty handles the drawing. GUI elements.

GUI Design: RandomDotApplet GUI: public void init() { getContentPane().setLayout(new BorderLayout()); draw.addActionListener(this); clear.addActionListener(this); controls.add(draw); controls.add(clear); canvas.setBorder(BorderFactory.createTitledBorder("Drawing Canvas")); getContentPane().add("North", controls); getContentPane().add("Center", canvas); getContentPane().setSize(400, 400); } // init()

Design: Dotty Class A Dotty object draws N dots on a JPanel. import java.awt.*; import javax.swing.*; // Import Swing classes public class Dotty { private static final int HREF = 20, VREF = 20, LEN = 200; private JPanel canvas; private int nDots; // Number of dots to draw private int nDrawn; // Number of dots drawn private int firstRed = 0; // Number of the first red dot public Dotty(JPanel canv, int dots) { canvas = canv; nDots = dots; } } // Dotty Constructor supplies N and reference to JPanel. Unthreaded Dotty.

Dotty Methods: draw() and clear() public void draw() { Graphics g = canvas.getGraphics(); for (nDrawn = 0; nDrawn < nDots; nDrawn++) { int x = HREF + (int)(Math.random() * LEN); int y = VREF + (int)(Math.random() * LEN); g.fillOval(x, y, 3, 3); // Draw a dot if ((Math.random() < 0.001) && (firstRed == 0)) { g.setColor(Color.red); // Change color to red firstRed = nDrawn; } } //for } // draw() public void clear() { // Clear screen and report result Graphics g = canvas.getGraphics(); g.setColor(canvas.getBackground()); g.fillRect(HREF, VREF, LEN + 3, LEN + 3); System.out.println("Number of red dots = " + (nDrawn-firstRed)); } // clear() At some random point, switch color to red. Draw N dots. Report results.

Implementation: Single- threaded Control public void actionPerformed(ActionEvent e) { if (e.getSource() == draw) { dotty = new Dotty(canvas, NDOTS); dotty.draw(); } else { dotty.clear(); } } // actionPerformed() Poor Response Time: The applet’s clear() must wait until dotty’s draw() loop ends. Applet and Dotty are part of same thread.

Modified Design: A Runnable Dotty public class Dotty implements Runnable { private static final int HREF = 20, VREF = 20, LEN = 200; private JPanel canvas; private int nDots; // Number of dots to draw private int nDrawn; // Number of dots drawn private int firstRed = 0; // Number of the first red dot private boolean isCleared = false; // The panel is cleared public void run() { draw(); } public Dotty(JPanel canv, int dots) { canvas = canv; nDots = dots; } } // Dotty Make Dotty Runnable. run() just calls draw() If a thread sleeps, waiting threads can run. isCleared controls draw() loop

public void draw() { Graphics g = canvas.getGraphics(); for (nDrawn = 0; !isCleared && nDrawn < nDots; nDrawn++) { int x = HREF + (int)(Math.random() * LEN); int y = VREF + (int)(Math.random() * LEN); g.fillOval(x, y, 3, 3); // Draw a dot if (Math.random() < && firstRed == 0) { g.setColor(Color.red); // Change color to red firstRed = nDrawn; } try { Thread.sleep(1) ; // Sleep for an instant } catch (InterruptedException e) { System.out.println(e.getMessage()); } //try } //for } // draw() public void clear() { // Clear screen and report result isCleared = true; Graphics g = canvas.getGraphics(); g.setColor(canvas.getBackground()); g.fillRect(HREF, VREF, LEN + 3, LEN + 3); System.out.println("Number of red dots = " + (nDrawn-firstRed)); } // clear() Stop if panel is cleared. Sleep after each dot. Stop the draw() loop. Modified draw() and clear()

Implementation: Multithreaded Control public void actionPerformed(ActionEvent e) { if (e.getSource() == draw) { dotty = new Dotty( canvas, NDOTS ); dottyThread = new Thread(dotty); dottyThread.start(); } else { dotty.clear(); } } // actionPerformed() Good Response Time: Because Dotty sleeps after every dot, clear() will run immediately. Create a Dotty thread and start it drawing. If Dotty sleeps, the applet thread can run.

Design Issues Effective Design: Use a separate thread for an interactive interface. Tradeoff: Dotty draws a little slower but the interface is more responsive. Algorithm: The correct way to stop a thread is to make its run() method dependent on a variable (e.g., isCleared ).

Thread States and Life Cycle Thread life cycle consists of several states. StateDescription Ready Ready to run and waiting for the CPU. Running Executing on the CPU. Waiting Waiting for some event to happen. Sleeping Sleeping for a time. Blocked Waiting for I/O to finish. Dead Terminated Key: Italic-- System control method() -- program control