CS 455: INTRODUCTION TO DISTRIBUTED SYSTEMS [THREADS] Frequently asked questions from the previous class survey

Similar documents
CS455: Introduction to Distributed Systems [Spring 2019] Dept. Of Computer Science, Colorado State University

CS 455: INTRODUCTION TO DISTRIBUTED SYSTEMS [THREADS] Frequently asked questions from the previous class survey

Concurrent Programming using Threads

Java Threads. Written by John Bell for CS 342, Spring 2018

Object Oriented Programming. Week 10 Part 1 Threads

Unit - IV Multi-Threading

Frequently asked questions from the previous class survey

Advanced Programming Methods. Lecture 6 - Concurrency in Java (1)

Lecture 7: Process & Thread Introduction

Techniques of Java Programming: Concurrent Programming in Java

7. MULTITHREDED PROGRAMMING

CS 351 Design of Large Programs Threads and Concurrency

Contents. G53SRP: Java Threads. Definition. Why we need it. A Simple Embedded System. Why we need it. Java Threads 24/09/2009 G53SRP 1 ADC

Overview. Processes vs. Threads. Computation Abstractions. CMSC 433, Fall Michael Hicks 1

Threads Chate Patanothai

Computation Abstractions. Processes vs. Threads. So, What Is a Thread? CMSC 433 Programming Language Technologies and Paradigms Spring 2007

COMP31212: Concurrency A Review of Java Concurrency. Giles Reger

Java Threads. Introduction to Java Threads

Overview of Java Threads (Part 2)

CS370: Operating Systems [Spring 2017] Dept. Of Computer Science, Colorado State University

Java Threads. COMP 585 Noteset #2 1

Frequently asked questions from the previous class survey

CMSC 132: Object-Oriented Programming II. Threads in Java

UNIT V CONCURRENT PROGRAMMING

Unit 4. Thread class & Runnable Interface. Inter Thread Communication

G52CON: Concepts of Concurrency

Frequently asked questions from the previous class survey

CMSC 433 Programming Language Technologies and Paradigms. Concurrency

CMSC 330: Organization of Programming Languages

Quiz on Tuesday April 13. CS 361 Concurrent programming Drexel University Fall 2004 Lecture 4. Java facts and questions. Things to try in Java

Programmazione Avanzata e Paradigmi Ingegneria e Scienze Informatiche - UNIBO a.a 2013/2014 Lecturer: Alessandro Ricci

Frequently asked questions from the previous class survey

JAVA and J2EE UNIT - 4 Multithreaded Programming And Event Handling

Synchronized Methods of Old Versions of Java

Multithread Computing

Run-time Environments

Run-time Environments

Multitasking Multitasking allows several activities to occur concurrently on the computer. A distinction is usually made between: Process-based multit

Introduction to Java Threads

Unit III Rupali Sherekar 2017

Dr.-Ing. Michael Eichberg

Threads Questions Important Questions

Multithreaded Programming

CS 556 Distributed Systems

Java s Implementation of Concurrency, and how to use it in our applications.

CMSC 330: Organization of Programming Languages. Threads Classic Concurrency Problems

Contents. 6-1 Copyright (c) N. Afshartous

Chapter 32 Multithreading and Parallel Programming

Produced by. Design Patterns. MSc in Computer Science. Eamonn de Leastar

Lecture 20. Java Exceptional Event Handling. Dr. Martin O Connor CA166

Introduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras

Review what constitutes a thread Creating threads general Creating threads Java What happens if synchronization is not used? Assignment.

Multithreading in Java Part 2 Thread - States JAVA9S.com

CPS221 Lecture: Threads

CS555: Distributed Systems [Fall 2017] Dept. Of Computer Science, Colorado State University

The Dining Philosophers Problem CMSC 330: Organization of Programming Languages

Info 408 Distributed Applications Programming Exercise sheet nb. 4

THREADS AND CONCURRENCY

SUMMARY INTRODUCTION CONCURRENT PROGRAMMING THREAD S BASICS. Introduction Thread basics. Thread states. Sequence diagrams

Multithreaded Programming

CMSC 330: Organization of Programming Languages. The Dining Philosophers Problem

EDAF65 Processes and Threads

Concurrency & Parallelism. Threads, Concurrency, and Parallelism. Multicore Processors 11/7/17

EDA095 Processes and Threads

Threads, Concurrency, and Parallelism

Object Oriented Programming (II-Year CSE II-Sem-R09)

Basics of. Multithreading in Java

Module - 4 Multi-Threaded Programming

Need for synchronization: If threads comprise parts of our software systems, then they must communicate.

Short Notes of CS201

CS370 Operating Systems

Concurrent Programming

CS555: Distributed Systems [Fall 2017] Dept. Of Computer Science, Colorado State University

Threads & Timers. CSE260, Computer Science B: Honors Stony Brook University

THE PROCESS ABSTRACTION. CS124 Operating Systems Winter , Lecture 7

CS11 Java. Fall Lecture 7

CS201 - Introduction to Programming Glossary By

What is a thread anyway?

CS370: System Architecture & Software [Fall 2014] Dept. Of Computer Science, Colorado State University

Computation Abstractions. CMSC 330: Organization of Programming Languages. So, What Is a Thread? Processes vs. Threads. A computer.

Frequently asked questions from the previous class survey

Threads. Definitions. Process Creation. Process. Thread Example. Thread. From Volume II

Process. Heechul Yun. Disclaimer: some slides are adopted from the book authors slides with permission

Contribution:javaMultithreading Multithreading Prof. Dr. Ralf Lämmel Universität Koblenz-Landau Software Languages Team

public class Shared0 { private static int x = 0, y = 0;

Frequently asked questions from the previous class survey

Advanced Java Programming Course. MultiThreading. By Võ Văn Hải Faculty of Information Technologies Industrial University of Ho Chi Minh City

CS370: Operating Systems [Spring 2017] Dept. Of Computer Science, Colorado State University

Overview. CMSC 330: Organization of Programming Languages. Concurrency. Multiprocessors. Processes vs. Threads. Computation Abstractions

Parallel Programming Practice

Get out, you will, of this bind If, your objects, you have confined

Lecture 15: I/O Devices & Drivers

Dept. Of Computer Science, Colorado State University

EECS 3221 Operating System Fundamentals

EECS 3221 Operating System Fundamentals

Program #3 - Airport Simulation

Research on the Novel and Efficient Mechanism of Exception Handling Techniques for Java. Xiaoqing Lv 1 1 huihua College Of Hebei Normal University,

Advanced Flow of Control -- Introduction

Amity School of Engineering

Parallel Programming Practice

Transcription:

CS 455: INTRODUCTION TO DISTRIBUTED SYSTEMS [THREADS] Shrideep Pallickara Computer Science Colorado State University L6.1 Frequently asked questions from the previous class survey L6.2 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.1

Topics covered in this lecture Creation and Management Thread lifecycle Creating and starting threads Stopping and interrupting threads Approaches to writing threads Subclassing Threads vs Implementing Runnable L6.3 Thread Abstraction A thread is a single execution sequence that represents a separately schedulable task Single execution sequence n Each thread executes sequence of instructions assignments, conditionals, loops, procedures, etc. just as the sequential programming model Separately schedulable task n The OS can run, suspend, or resume a thread at any time L6.4 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.2

THREADS AND HEAPS AND STACKS L6.5 Threads and heaps For performance reasons, heaps may internally subdivide their space into per-thread regions Threads can allocate objects at the same time without interfering with each other By allocating objects used by the same thread from the same memory region? n Cache hit rates may improve Each subdivision of the heap has thread-local variables Track parts of thread-local heap in use, those that are free, etc. New memory allocations (malloc() and new() ) can take memory from shared heap, only if local heap is used up L6.6 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.3

How big a stack? The size of the stack must be large enough to accommodate the deepest nesting level needed during the thread s lifetime Kernel threads Kernel stacks are allocated in physical memory The nesting depth for kernels tends to be small E.g. 8KB default in Linux on an Intel x86 Buffers and data structures are allocated on the heap and never as procedure local variables L6.7 How big a stack? User-level stacks are allocated in virtual memory To catch program errors Most OS will trigger error if the program stack grows too large too quickly n Indication of an unbounded recursion Google s GO will automatically grow the stack as needed this is very uncommon POSIX for e.g. allows default stack size to be library dependent (e.g. larger on a desktop, smaller on a phone) n Exceeding default stack limit is very easy to do, with the usual results n Program termination L6.8 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.4

THREAD CREATION L6.9 Thread creation Using the Thread class Using the Runnable interface L6.10 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.5

The Thread class package java.lang; public class Thread implements Runnable { public Thread(); public Thread(Runnable target); public Thread(ThreadGroup group, Runnable target); public Thread(String name); public Thread(ThreadGroup group, String name); public Thread(Runnable target, String name); public Thread(ThreadGroup group, Runnable target, String name); public Thread(ThreadGroup group, Runnable target, String name, long stacksize); public void start(); public void run(); L6.11 Threads require 4 pieces of information Thread name Default is Thread-N; N is a unique number Runnable target List of instructions that the thread executes Default: run() method of the thread itself Thread group A thread is assigned to the thread group of the thread that calls the constructor Stack size Store temporary variables during method execution Platform-dependent: range of legal values, optimal value, etc. L6.12 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.6

A simple thread public class RandomGen extends Thread { private Random random; private int nextnumber; public RandomGen() {random = new Random(); public void run() { for (;;) { nextnumber = random.nextint(); try { catch (InterruptedException ie) {... return; L6.13 About the code snippet Extends the Thread class Actual instructions we want to execute is in the run() method Standard method of the Thread class n Place where Thread begins execution L6.14 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.7

Contrasting the run() and main() methods main() method This is where the first thread starts executing The main thread The run() method Subsequent threads start executing with this method L6.15 THREAD LIFECYCLE L6.16 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.8

Lifecycle of a thread Creation Starting Terminating Pausing, suspending, and resuming L6.17 Thread: Methods that impact the thread s lifecycle public class Thread implements Runnable { public void start(); public void run(); public void stop(); public void resume(); Deprecated, do not use public void suspend(); public static void sleep(long millis); public boolean isalive(); public void interrupt(); public boolean isinterrupted(); public static boolean interrupted(); public void join(); L6.18 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.9

Thread creation Threads are represented by instances of the Thread class When you extend the Thread class? Your instances are also Threads We looked at the 4 constructor arguments in the Thread class L6.19 Starting a thread (1/2) Thread exists once it s been constructed But it is not executing it s in a waiting state In the waiting state, other threads can interact with the existing thread object Object state may be changed by other threads n Via method invocations L6.20 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.10

Starting a thread (2/2) When we re ready for a thread to begin executing code Call the start() method start() performs internal house-keeping and then calls the run() method When the start() method returns? Two threads are executing in parallel 1 The original thread which just returned from calling start() 2 The newly started thread that is executing its run() method L6.21 After a thread s start() method is called The new thread is said to be alive The isalive() method tells you about the state true: Thread has been started and is executing its run() method false: Thread may not be started yet or may be terminated L6.22 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.11

Terminating a thread Once started, a thread executes only one method: run() This run() may be complicated May execute forever Call several other methods Once the run() finishes executing, the thread has completed its execution L6.23 Like all Java methods, run() finishes when it 1 Executes a return statement 2 Executes the last statement in its method body 3 When it throws an exception Or fails to catch an exception thrown to it L6.24 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.12

The only way to terminate a thread? Arrange for its run() method to complete But the documentation for the Thread class lists a stop() method? This has a race condition (unsafe), and has been deprecated L6.25 Some more about the run() method Cannot throw a checked exception But it can throw an unchecked exception Exception that extends the RuntimeException A thread can be stopped by: 1 Throwing an unchecked exception in run() 2 Failing to catch an unchecked exception thrown by something that run() has called L6.26 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.13

Pausing, suspending and resuming threads Some thread models support the concept of thread suspension Thread is told to pause execution and then told to resume its execution Thread contains suspend() and resume() Suffers from vulnerability to race conditions: deprecated Thread can suspend its own execution for a specified period By calling the sleep() method L6.27 But sleeping is not the same thing as thread suspension With true thread suspension One thread can suspend (and later resume) another thread sleep() affects only the thread that executes it Not possible to tell another thread to go to sleep L6.28 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.14

But you can achieve the functionality of suspension and resumption Use wait and notify mechanisms Threads must be coded to use this technique This is not a generic suspend/resume that is imposed by another thread L6.29 Thread cleanup As long as some other active object holds a reference to the terminated thread object Other threads can execute methods on the terminated thread retrieve information If the object representing the terminated thread goes out of scope? The thread object is garbage collected L6.30 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.15

Holding onto a thread reference allows us to determine if work was completed Done using the join() method The join() method Blocks until the thread has completed Returns immediately if n The thread has already completed its run() method n You can call join() any number of times Don t use join() to poll if the thread is still running Use isalive() L6.31 STOPPING A THREAD L6.32 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.16

Two approaches to stopping a thread Setting a flag Interrupting a thread L6.33 Stopping a Thread: Setting a flag Set some internal flag to signal that the thread should stop Thread periodically queries the flag to determine if it should exit L6.34 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.17

Stopping a Thread: Setting a flag public class RandomGen extends Thread { private volatile boolean done = false; public void run() { while (!done) {... public void setdone() { done = true; run() method investigates the state of the done variable on every loop. Returns when the done flag has been set. L6.35 Interrupting a thread In the previous slide, there may be a delay in the setdone() being invoked & thread terminating Some statements are executed after setdone() and before the value of done is checked In the worst case, setdone() is called right after the the done variable was checked Delays while waiting for a thread to terminate are inevitable But it would be good if they could be minimized L6.36 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.18

Interrupting a thread When we arrange for thread to terminate, we: Want it to complete its blocking method immediately Don t wish to wait for the data (or ) because the thread will exit Use interrupt() method of the Thread class to interrupt any blocking method L6.37 Effects of the interrupt method Causes blocked method to throw an InterruptedException sleep(), wait(), join(), and methods to read I/O Sets a flag inside the thread object to indicate that the thread has been interrupted Queried using isinterrupted() n Returns true if it was interrupted, even though it was not blocked L6.38 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.19

Stopping a thread: Using interrupts public class RandomGen extends Thread { public void run() { while (!isinterrupted()) {... radomgeneratorthread.interrupt() L6.39 The Runnable interface Allows separation of the implementation of the task from the thread used to run task public interface Runnable { public void run(); L6.40 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.20

Creation of a thread using the Runnable interface Construct the thread Pass runnable object to the thread s constructor Start the thread Instead of starting the runnable object L6.41 Creation of a thread using the Runnable interface public class RandomGenerator implements Runnable { public void run() {...... generator = new RandomGenerator(); Thread createdthread = new Thread(generator); createdthread.start(); L6.42 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.21

When to use Runnable and Thread If you would like your class to inherit behavior from the Thread class Extend Thread If your class needs to inherit from other classes Implement Runnable L6.43 If you extend the Thread class? You inherit behavior and methods of the Thread class The interrupt() method is part of the Thread class You can interrupt() if you extend L6.44 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.22

Advantages of using the Runnable interface Java provides several classes that handle threading for you Implement pooling, scheduling, or timing These require the Runnable interface L6.45 But what if I still can t decide? Do a UML model of your application The object hierarchy tells you what you need: If your task needs to subclass another class? n Use Runnable If you need to use methods of Thread within your class? n Use Thread L6.46 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.23

Threads and Objects Instance of the Thread class is just an object Can be passed to other methods If a thread has a reference to another thread n It can invoke any method of that thread s object The Thread object is not the thread itself It is the set of methods and data that encapsulate information about the thread L6.47 But what does this mean? You cannot look at the object source and know which thread is: Executing its methods or examining its data You may wonder about which thread is running the code, but There may be many possibilities L6.48 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.24

Determining the current thread Code within a thread object might want to see that code is being executed either: By thread represented by the object or By a completely different thread Retrieve reference to current thread Thread.currentThread() Static method L6.49 Checking which thread is executing the code public class MyThread extends Thread { public void run() { if (Thread.currentThread()!= this) { throw new IllegalStateException ( Run method called by incorrect thread ); /* end if */... Main logic L6.50 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.25

Allowing a Runnable object to see if it has been interrupted public class MyRunnable implements Runnable { public void run() { if (!Thread.currentThread().isInterrupted() ) {... Main logic L6.51 The contents of this slide-set are based on the following references Java Threads. Scott Oaks and Henry Wong.. 3rd Edition. O Reilly Press. ISBN: 0-596- 00782-5/978-0-596-00782-9. [Chapters 3, 4] Operating Systems Principles and Practice. Thomas Anderson and Michael Dahlin. 2 nd Edition. ISBN: 978-0985673529. [Chapter 4] L6.52 SLIDES CREATED BY: SHRIDEEP PALLICKARA L6.26