1 Java Threads and Synchronization Review Modified from slides taken from

Slides:



Advertisements
Similar presentations
CS 5704 Fall 00 1 Monitors in Java Model and Examples.
Advertisements

Concurrency (3) CSE 132. iClicker/WUTexter Question The following four numbers are in 8-bit 2’s complement form: Which.
Concurrency and Thread Yoshi. Two Ways to Create Thread Extending class Thread – Actually, we need to override the run method in class Thread Implementing.
Threading Part 2 CS221 – 4/22/09. Where We Left Off Simple Threads Program: – Start a worker thread from the Main thread – Worker thread prints messages.
1 Chapter 8 Three Interfaces: Cloneable, Serializable, and Runnable.
Slides 8c-1 Programming with Shared Memory Java Threads and Synchronization Review The following notes are based upon the Java tutorial at
CS220 Software Development Lecture: Multi-threading A. O’Riordan, 2009.
Synchronization in Java Fawzi Emad Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
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.
Definitions Process – An executing program
Threads Just Java: C10–pages 251- C11–pages 275-
© Amir Kirsh Threads Written by Amir Kirsh. 2 Lesson’s Objectives By the end of this lesson you will: Be familiar with the Java threads syntax and API.
Multithreading.
50.003: Elements of Software Construction Week 5 Basics of Threads.
Parallel Processing (CS526) Spring 2012(Week 8).  Thread Status.  Synchronization in Shared Memory Programming(Java threads ) ◦ Locks ◦ Barriars.
Internet Software Development More stuff on Threads Paul Krause.
 Traditionally, a process in an operating system consists of an execution environment and a single thread of execution (single activity).  However,
Threads. Overview Problem Multiple tasks for computer Draw & display images on screen Check keyboard & mouse input Send & receive data on network Read.
Lecture 5 : JAVA Thread Programming Courtesy : MIT Prof. Amarasinghe and Dr. Rabbah’s course note.
Quick overview of threads in Java Babak Esfandiari (extracted from Qusay Mahmoud’s slides)
Today’s Agenda  Quick Review  Finish Java Threads  The CS Problem Advanced Topics in Software Engineering 1.
Concurrent Programming in Java Dr. Zoltan Papp. Motivation: event driven, responsive systems Sequential approach: while ( true ) { do event = getEventId()
1 Tutorial: CSI 3310 Dewan Tanvir Ahmed SITE, UofO.
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.
Computer Engineering Rabie A. Ramadan Lecture 8. Agenda 2 Introduction Thread Applications Defining Threads Java Threads and States Priorities Accessing.
Practical OOP using Java Basis Faqueer Tanvir Ahmed, 08 Jan 2012.
Multithreading : synchronization. Avanced Programming 2004, Based on LYS Stefanus’s slides slide 4.2 Solving the Race Condition Problem A thread must.
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.
Threads in Java. Processes and Threads Processes –A process has a self-contained execution environment. –Has complete set of runtime resources including.
Threads.
Multithreading in Java Sameer Singh Chauhan Lecturer, I. T. Dept., SVIT, Vasad.
Concurrency in Java Brad Vander Zanden. Processes and Threads Process: A self-contained execution environment Thread: Exists within a process and shares.
Introduction to Threads Session 01 Java Simplified / Session 14 / 2 of 28 Objectives Define a thread Define multithreading List benefits of multithreading.
Advanced Programming 2004, based on LY Stefanus’s slides slide 8.1 Multithreading : Thread Scheduling ThreadGroup.
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
Object-oriented Programming in Java. © Aptech Ltd. Introduction to Threads/Session 7 2  Introduction to Threads  Creating Threads  Thread States 
Java Thread and Memory Model
Threading and Concurrency COM379T John Murray –
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.
Multithreaded programming  Java provides built-in support for multithreaded programming. A multithreaded program contains two or more parts that can run.
Multithreaded Programming using Java Threads
Chapter11 Concurrent. 集美大学 计算机工程学院 Java 程序设计 年 第二版 Concurrent ●Computer users take it for granted that their systems can do more than one thing.
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.
1 Java Programming Java Programming II Concurrent Programming: Threads ( I)
Java Threads Lilin Zhong. Java Threads 1. New threads 2. Threads in the running state 3. Sleeping threads and interruptions 4. Concurrent access problems.
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.
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.
Concurrency in Java MD. ANISUR RAHMAN. slide 2 Concurrency  Multiprogramming  Single processor runs several programs at the same time  Each program.
Concurrent Programming in Java Based on Notes by J. Johns (based on Java in a Nutshell, Learning Java) Also Java Tutorial, Concurrent Programming in Java.
Advanced Programming Concurrency and Threads Advanced Programming. All slides copyright: Chetan Arora.
1 Multithreading in Java THETOPPERSWAY.COM. 2 Outline  Multithreading & Thread Introduction  Creating threads  Thread Life Cycle  Threads priorities.
Threads in Java Two ways to start a thread
Multithreading / Concurrency
Multithreading in Java
EE 422C Multithreading & Parallel Programming
Threads Chate Patanothai.
Multithreading.
Java Based Techhnology
Multithreading.
Programming with Shared Memory Java Threads and Synchronization
Programming with Shared Memory Java Threads and Synchronization
برنامه‌نویسی چندنخی Multi-Thread Programming
Computer Science 2 06A-Java Multithreading
Threads and Multithreading
Java Chapter 3 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

1 Java Threads and Synchronization Review Modified from slides taken from Based upon the Java tutorial at More in-depth tutorial available at

2 Thread class Each thread is an object of the Thread class. (Java tutorial says: “Each thread is associated with an instance of the class Thread.”)Thread Java provide two basic ways to creates a thread: 1.Define a class that is derived class of the class Thread. 2.Make your class implement the Runnable interface

3 Simplest way is: 1.Define a class that is derived class of the class Thread. Object of this class is a thread. Provide the method called run (which will override the inherited run method, which does nothing). The run method defines the code for the thread. Invoke the start method, which initiates the computation of the thread

4 Example public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { HelloThread myThread = new HelloThread(); myThread.start(); } Java entry point Start thread and execute run method Create Thread object

5 Simpler version if name of thread object not needed public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { (new HelloThread()).start(); } However, usually one does need the object by name to apply other thread methods.

6 The Thread class actually implements the interface called Runnable. The Runnable interface defines the single method, run, meant to contain the code executed in the thread. Alternate more powerful way to create threads: 2. Make your class explicitly implement the Runnable interface

7 Example public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { HelloRunnable myThread = new HelloRunnable(); // Runnable object Thread tr = new Thread(myThread); // Create Thread object tr.start(); // Start thread and execute run method } Runnable object

8 Slightly simplified version : public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { Thread tr = new Thread(new HelloRunnable()) tr.start(); } Even simpler if thread object name not needed: public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { (new Thread(new HelloRunnable())).start(); }

9 Runnable object can subclass a class other than Thread, i.e.: public class MyRunnable extends SomeClass implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[ ]) { (new Thread(new HelloRunnable())).start(); } Note: both the Thread class and the Runnable interface are part of the standard Java libraries (java.lang package)

10 Thread Priority In Java, each thread assigned priority, which affects the order in which it is scheduled for running. Threads so far had same default priority (NORM_PRIORITY) and they are served using FCFS policy. Java allows users to change priority: ThreadName.setPriority(intNumber) –MIN_PRIORITY = 1 –NORM_PRIORITY=5 –MAX_PRIORITY=10 Based on Raj Buyya’s slides

11 Thread class Various instance and class methods, setters and getters: Class methods: sleep() … Instance methods: destroy() interrupt() join() start() … Depreciated methods (unsafe and can cause deadlock) resume(), stop() suspend()

12 Thread.sleep causes the current thread to suspend execution for a specified period. Example Sleep to print messages at four-second intervals: public class SleepMessages { public static void main(String args[]) throws InterruptedException { String importantInfo[] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" }; for (int i = 0; i < importantInfo.length; i++) { Thread.sleep(4000); //Pause for 4 seconds System.out.println(importantInfo[i]); //Print a message } exception that sleep throws when another thread interrupts current thread while sleep is active. Not caught in sample code.

13 Java Synchonization Java provides Synchronized keyword to methods that cause only one invocation of a synchronized method on the same object at a time. Example public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; }

14 Implementation of Java synchronization Every object has an intrinsic lock associated with it. A thread that needs exclusive and consistent access to an object's fields has to acquire the object's intrinsic lock before accessing them, and then release the intrinsic lock when it is done with them.

15 Example using synchronized methods On-line banking Several entities can access account potentially simultaneously (maybe a joint account, maybe automatic debits, …) Suppose three entities each trying to perform an operation, either: deposit() withdraw() enquire()

16 Create three threads, one for each entities class InternetBankingSystem { public static void main(String [] args ) { Account accountObject = new Account (); Thread t1 = new Thread(new MyThread(accountObject)); Thread t2 = new Thread(new YourThread(accountObject)); Thread t3 = new Thread(new HerThread(accountObject)); t1.start(); t2.start(); t3.start(); // DO some other operation } // end main() } Based on Raj Buyya’s slides

17 Shared account class MyThread implements Runnable { Account account; public MyThread ( Account s) { account = s;} public void run() { account.deposit(); } } // end class MyThread class YourThread implements Runnable { Account account; public YourThread ( Account s) { account = s;} public void run() { account.withdraw(); } } // end class YourThread class HerThread implements Runnable { Account account; public HerThread ( Account s) { account = s; } public void run() {account.enquire(); } } // end class HerThread account (shared object)

18 Synchronized account methods class Account { int balance; // if 'synchronized' is removed, outcome unpredictable public synchronized void deposit( ) { balance += deposit_amount; } public synchronized void withdraw( ) { balance -= deposit_amount; } public synchronized void enquire( ) { display balance. }

19 Synchronized Statements Unlike synchronized methods, synchronized statements must specify the object that provides the intrinsic lock: Uses construct ion: synchronized ( expression ) { statements } Evaluate to an object or an array. Used to identify lock. “critical section”

20 Synchronized Statements Example public void addName(String name) { synchronized(this) { lastName = name; nameCount++; } nameList.add(name); } Only this part synchronized

21 Synchronized Statements Example class Account { static synchronized void lookup(String name) { … } is equivalent to class Account { static void lookup(String name) { synchronized(Account.class) { … }

22 atomic action An atomic action cannot stop in the middle: it either happens completely, or it doesn't happen at all. No side effects of an atomic action are visible until the action is complete. Read/writes can be declared atomic with the volatile keyword, e.g. private volatile int x; Sometimes can be more efficient than synchronized methods.

23 Coordinating threads Wait/notify mechanism Sometimes need a thread to stop running and wait for an event before continuing. wait(), notify(), and notifyAll() methods are methods of class Object. They must be called by a thread currently holding this object’s lock; otherwise an IllegalMonitorStateException is thrown.IllegalMonitorStateException Every object can maintain a list of waiting threads.

24 Coordinating threads Wait/notify mechanism Every object can maintain a list of waiting threads. wait() When a thread calls wait() method of an object, it release this lock, and thread is added to list of waiting threads for that object and stops running. notify() When another thread calls notify() method on the same object, one of the waiting threads is unblocked and allows it to continue. The choice is arbitrary. notifyAll() All waiting threads are unblocked and can continue.

25 Join Sometimes one thread needs to stop and wait for another thread to complete. join() -- waits for a thread to die, i.e. thr1.join() waits for thread thr1 to die. Calling return() from the run method implicitly causes the thread to exit.

Read/Write Synchronization: Version 1 (Allow Multiple Readers) public class Database { public Database() { readerCount = 0; dbWriting = false; } public synchronized int startRead() { /* see next slides */ } public synchronized int endRead() { /* see next slides */ } public synchronized void startWrite() { /*see next slides*/ } public synchronized void endWrite() { /*see next slides*/ } private int readerCount; private boolean dbWriting; }

startRead() and endRead() public synchronized int startRead() { while (dbWriting == true) { try { wait(); } catch (InterruptedException e) { } } readerCount++; return readerCount; } public synchronized int endRead() { readerCount--; if (readerCount == 0) db.notifyAll(); return readerCount; }

Writer Methods public synchronized void startWrite() { while (readerCount > 0 || dbWriting == true) { try { wait();} catch (InterruptedException e) { } } dbWriting = true; } public synchronized void endWrite() { dbWriting = false; notifyAll(); }

Read/Write Synchronization: Version 2 (Writer preferred) public class Database { public Database() { readerCount = 0; waitingWriters = 0; dbWriting = false; } public synchronized int startRead() { /* see next slides */ } public synchronized int endRead() { /* see next slides */ } public synchronized void startWrite() { /*see next slides*/ } public synchronized void endWrite() { /*see next slides*/ } private int readerCount; private int waitingWriters; // # of writers running/waiting private boolean dbWriting; }

startRead() and endRead() public synchronized int startRead() { while (dbWriting == true || waitingWriters > 0) { try { wait(); } catch (InterruptedException e) { } } readerCount++; return readerCount; } public synchronized int endRead() { readerCount--; if (readerCount == 0) db.notifyAll(); return readerCount; }

Writer Methods public synchronized void startWrite() { waitingWriters++; while (readerCount > 0 || dbWriting == true) { try { wait();} catch (InterruptedException e) { } } dbWriting = true; } public synchronized void endWrite() { waitingWriters--; dbWriting = false; notifyAll(); }