SlideShare une entreprise Scribd logo
1  sur  24
CONCURRENT PROGRAMMING
THREAD’S BASICS
PROGRAMMAZIONE CONCORRENTE E DISTR.
Università degli Studi di Padova
Dipartimento di Matematica
Corso di Laurea in Informatica, A.A. 2015 – 2016
rcardin@math.unipd.it
Programmazione concorrente e distribuita
SUMMARY
 Introduction
 Thread basics
 Thread properties
 Thread states
 Thread interruption
 Sequence diagrams
2Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
 Multitasking
 The ability to have more than a program working at
what seems like the same time
 The unity of this type of programming is a process
 A process has its own variables
 Communication between process is accomplished using
messages sent over a common channel (i.e. a socket)
 Very hard to accomplish and no so performant
 Types
 Cooperative: CPU control is left to the processes
 Time-sliced: the OS (scheduler) assigns a time slice to each
process
3Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
 Multithread
 A programming model that allows multiple threads to
exists within the same context of a single process
 Every process will appear to do multiple tasks
 Threads share the same data and variables
 Every process as a main thread
 This thread can create other threads, called secondary
 Every thread as a priority order (1 .. 10)
 Types
 Cooperative
 Time-sliced: thread scheduling is left to the main thread, that
uses OS utilities
4Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
5Riccardo Cardin
Programmazione concorrente e distribuita
INTRODUCTION
6Riccardo Cardin
Process
Memory
Thread 1
Task Task
Thread 2
Task
Thread 3
Task
Threads
share the
same
memory
chunks
Every thread
could be reused
to execute
different tasksThreads are
lighter than
processes, even
so their creation
is still time-
consuming
Each process
can execute
many threads
Threads are a
mechanism provided
by the OS
Programmazione concorrente e distribuita
DEFINITION
 Multithread programming
 A programming model that allows multiple threads to
exists within the same context of a single process
 Responsiveness
 Faster execution
 Lower resource consumption
 Parallelization
 Java has built-in support for concurrent programming
7Riccardo Cardin
A thread is the smallest sequence of programmed instructions that can
be managed independently. Multiple thread can exist within the same
process, executing concurrently and share resources such as memory.
- Wikipedia
Programmazione concorrente e distribuita
THREAD BASICS
 Threads in Java are the primitives that actually
execute tasks
 Runnable interface describes a task you want to
run, usually concurrently with others
 The code of the run method will be executed in a thread
 Tasks are short lived, so you don’t waste the time to start a
thread
8Riccardo Cardin
public interface Runnable {
void run();
}
Runnable task = () -> {
int i = 0;
while (i < 1000) i++;
}
new Thread(task).start(); // A thread running a task
Programmazione concorrente e distribuita
THREAD BASICS
 You should decouple the task that is to be run in
parallel from the mechanism of running it
 You can also define a subclass of Thread, but this
approach is no longer recommended
 If you have many task is to expensive create a single thread
for each one
 Do not call the run method on Thread or Runnable
instances
 The task is merely executed in the same thread
9Riccardo Cardin
class MyThread extends Thread {
public void run() {
// task code, don’t do this!!!
}
}
Programmazione concorrente e distribuita
THREAD BASICS
10Riccardo Cardin
Programmazione concorrente e distribuita
THREAD BASICS
 The main method executes in the main thread
 From the main thread they can be executed other
thread, called secondary
 They execute in pararrel wrt the main thread
 Threads can be of two type
 User threads
 JVM stops when there are no more user thread executing
 Deamon threads
 A deamon stops when its user thread stops
11Riccardo Cardin
public class Example {
public static void main(String[] args) {
// This code runs inside the main thread
}
}
Programmazione concorrente e distribuita
THREAD PROPERTIES
 Thread priorities
 Use setPriority method to give a thread a priority
 MIN_PRIORITY = 1 and MAX_PRIORITY = 10
 Don’t use priorities, they are too highly system-dependent
 Deamon threads
 Use setDeamon method
 Its only role is to serve other threads
 When only deamon threads remain, the JVM exits
 Handlers for uncaught exceptions
 The run method cannot throw any checked ex.
 Install an UncaughtExceptionHandler to manage ex.
12Riccardo Cardin
Programmazione concorrente e distribuita
THREAD STATES
 6 thread states
 New
 Runnable
 Blocked
 Waiting
 Time waiting
 Terminated
 Use getState
method
 Thread.State
13
No resources
associated
Runnable ≠
Running
Programmazione concorrente e distribuita
THREAD STATES
 New threads
 Just created with the new operator. Not yet running
 Runnable threads
 Once the start method is invoked.
 Resource creation, scheduling
 run method is invoked
 It may or not actually be running
 DO NOT CALL RUN METHOD DIRECTLY!
14Riccardo Cardin
public static void main(String[] args) {
// Not concurrent, but sequential
new MyThread().run();
for (int i = 0; i < 200; i++)
System.out.println("Cycle - " + i);
}
Programmazione concorrente e distribuita
THREAD STATES
 Blocked and Waiting threads
 Temporarily inactive
 A thread becomes blocked when it tries to acquire an
intrinsic object lock
 When a thread waits for another thread to notify of a
condition, it enters the waiting state
 The calling of a timeout parameters causes the thread to
enter the timed waiting (Thread.sleep)
 A thread waits for another thread to finish, calling the join
method on it
 Terminated threads
 It is not possible to reborn a thread in this state
15Riccardo Cardin
Programmazione concorrente e distribuita
THREADS INTERRUPTION
 A thread terminates when it’s run method:
 Returns by executing a return statement
 After executing the last statement in method body
 If an unhandled exception occurs
 It is possible to send an interruption request
 Use the interrupt method
 Thread states becomes interrupted, but thread is not
interrupted by the JVM
 Thread should check whether it has been interrupted
16Riccardo Cardin
while (!Thread.currentThread().isInterrupted() && more work to do) {
// do more work
}
Programmazione concorrente e distribuita
THREADS INTERRUPTION
 Waiting for another thread to finish
 Use join() or join(long millis)
 An instance of the joining thread must be available
 Passing a time interval to the method has the effect to limit
the waiting period to millis milliseconds
17Riccardo Cardin
Thread thread = new Thread(() -> {
// Do some heavy work
});
thread.start();
try {
// Waiting for at max 1 second the termination of thread
thread.join(1000L);
} catch(InterruptedException e) {
// thread was interrupted during sleep
} finally {
// cleanup, if required
}
Programmazione concorrente e distribuita
THREADS INTERRUPTION
 Implementing collaborative preemption
 Thread.yield() notifies the system that the current
thread is willing to "give up the CPU" for a while.
 Thread scheduler will select a different thread to run
 If no other thread is present, the statement has no effect
 When to use yield()? Practically NEVER
 Use Thread.sleep() (requires some self-computation)
 Use synchronization mechanisms if waiting for a process or
a resource
18Riccardo Cardin
while ( /* more work to do */ ) {
// do more work
Thread.yield();
}
Programmazione concorrente e distribuita
THREADS INTERRUPTION
 Interrupting a thread simply grabs its attention
 Use Thread.sleep(long time) to suspend
temporarily the thread
 If the interrupted thread was sleeping or waiting for
something, an InterruptedException is thrown
 ...and the thread status is cleared!
19Riccardo Cardin
try {
while ( /* more work to do */ ) {
// do more work
Thread.sleep(delay);
}
} catch(InterruptedException e) {
// thread was interrupted during sleep
} finally {
// cleanup, if required
}
Programmazione concorrente e distribuita
THREADS INTERRUPTION
20Riccardo Cardin
Programmazione concorrente e distribuita
SEQUENCE DIAGRAMS
 How can we reason about thread visually?
 UML gives use sequence diagrams
21Riccardo Cardin
Partecipant
Timepassing
Life line
Programmazione concorrente e distribuita
SEQUENCE DIAGRAMS
22Riccardo Cardin
A sequence diagram describes the cooperation between a group of
objects that have to interact with each other to fulfill an objective
Definition
Message
Find message
Internal call
Return
Object
creation
Programmazione concorrente e distribuita
EXAMPLES
23Riccardo Cardin
https://github.com/rcardin/pcd-snippets
Programmazione concorrente e distribuita
REFERENCES
 Chap. 14 «Multithreading», Core Java Volume I - Fundamentals, Cay
Horstmann, Gary Cornell, 2012, Prentice Hall
 Thread.yield
http://www.javamex.com/tutorials/threads/yield.shtml
 What are the main uses of yield(), and how does it differ from join()
and interrupt()?
http://stackoverflow.com/questions/6979796/what-are-the-main-
uses-of-yield-and-how-does-it-differ-from-join-and-interr
 Chap. 10 «Concurrent Programming», Core Java for the Impatient,
Cay Horstmann, 2015, Addison-Wesley
24Riccardo Cardin

Contenu connexe

Tendances

Java session13
Java session13Java session13
Java session13
Niit Care
 
Spin Locks and Contention : The Art of Multiprocessor Programming : Notes
Spin Locks and Contention : The Art of Multiprocessor Programming : NotesSpin Locks and Contention : The Art of Multiprocessor Programming : Notes
Spin Locks and Contention : The Art of Multiprocessor Programming : Notes
Subhajit Sahu
 
CS844 U1 Individual Project
CS844 U1 Individual ProjectCS844 U1 Individual Project
CS844 U1 Individual Project
ThienSi Le
 
Concurrency: Best Practices
Concurrency: Best PracticesConcurrency: Best Practices
Concurrency: Best Practices
IndicThreads
 

Tendances (16)

Java - Sockets
Java - SocketsJava - Sockets
Java - Sockets
 
Java session13
Java session13Java session13
Java session13
 
Generics and collections in Java
Generics and collections in JavaGenerics and collections in Java
Generics and collections in Java
 
Threading in java - a pragmatic primer
Threading in java - a pragmatic primerThreading in java - a pragmatic primer
Threading in java - a pragmatic primer
 
Spin Locks and Contention : The Art of Multiprocessor Programming : Notes
Spin Locks and Contention : The Art of Multiprocessor Programming : NotesSpin Locks and Contention : The Art of Multiprocessor Programming : Notes
Spin Locks and Contention : The Art of Multiprocessor Programming : Notes
 
CS844 U1 Individual Project
CS844 U1 Individual ProjectCS844 U1 Individual Project
CS844 U1 Individual Project
 
Concurrency with java
Concurrency with javaConcurrency with java
Concurrency with java
 
Concurrency: Best Practices
Concurrency: Best PracticesConcurrency: Best Practices
Concurrency: Best Practices
 
System Verilog Functional Coverage
System Verilog Functional CoverageSystem Verilog Functional Coverage
System Verilog Functional Coverage
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
 
Designing Better API
Designing Better APIDesigning Better API
Designing Better API
 
Introduction to-vhdl
Introduction to-vhdlIntroduction to-vhdl
Introduction to-vhdl
 
javarmi
javarmijavarmi
javarmi
 
Unit I Advanced Java Programming Course
Unit I   Advanced Java Programming CourseUnit I   Advanced Java Programming Course
Unit I Advanced Java Programming Course
 
JavaFX In Practice
JavaFX In PracticeJavaFX In Practice
JavaFX In Practice
 
Strategy and Template Pattern
Strategy and Template PatternStrategy and Template Pattern
Strategy and Template Pattern
 

En vedette

En vedette (14)

Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Introduzione ai Design Pattern
Introduzione ai Design PatternIntroduzione ai Design Pattern
Introduzione ai Design Pattern
 
Diagrammi delle Classi
Diagrammi delle ClassiDiagrammi delle Classi
Diagrammi delle Classi
 
Errori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei RequisitiErrori comuni nei documenti di Analisi dei Requisiti
Errori comuni nei documenti di Analisi dei Requisiti
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patterns
 
Java Graphics Programming
Java Graphics ProgrammingJava Graphics Programming
Java Graphics Programming
 
Design Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency InjectionDesign Pattern Architetturali - Dependency Injection
Design Pattern Architetturali - Dependency Injection
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections framework
 
Scala - the good, the bad and the very ugly
Scala - the good, the bad and the very uglyScala - the good, the bad and the very ugly
Scala - the good, the bad and the very ugly
 
SOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented DesignSOLID - Principles of Object Oriented Design
SOLID - Principles of Object Oriented Design
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java Programmers
 

Similaire à Java - Concurrent programming - Thread's basics

Multithreading
MultithreadingMultithreading
Multithreading
backdoor
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
Raghu nath
 
Multithreading
MultithreadingMultithreading
Multithreading
sagsharma
 

Similaire à Java - Concurrent programming - Thread's basics (20)

Multithreading
MultithreadingMultithreading
Multithreading
 
Md09 multithreading
Md09 multithreadingMd09 multithreading
Md09 multithreading
 
Slide 7 Thread-1.pptx
Slide 7 Thread-1.pptxSlide 7 Thread-1.pptx
Slide 7 Thread-1.pptx
 
Multi-threaded Programming in JAVA
Multi-threaded Programming in JAVAMulti-threaded Programming in JAVA
Multi-threaded Programming in JAVA
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
9.multi-threading latest(MB).ppt .
9.multi-threading latest(MB).ppt            .9.multi-threading latest(MB).ppt            .
9.multi-threading latest(MB).ppt .
 
Multithreading
MultithreadingMultithreading
Multithreading
 
Java Threads
Java ThreadsJava Threads
Java Threads
 
Java Multithreading and Concurrency
Java Multithreading and ConcurrencyJava Multithreading and Concurrency
Java Multithreading and Concurrency
 
Threadnotes
ThreadnotesThreadnotes
Threadnotes
 
Thread model in java
Thread model in javaThread model in java
Thread model in java
 
Java unit 12
Java unit 12Java unit 12
Java unit 12
 
Java Threads And Concurrency Presentation. 2024
Java Threads And Concurrency Presentation. 2024Java Threads And Concurrency Presentation. 2024
Java Threads And Concurrency Presentation. 2024
 
Java-Threads And Concurrency Presentation. 2024
Java-Threads And Concurrency Presentation. 2024Java-Threads And Concurrency Presentation. 2024
Java-Threads And Concurrency Presentation. 2024
 
Multithreading programming in java
Multithreading programming in javaMultithreading programming in java
Multithreading programming in java
 
advanced java ppt
advanced java pptadvanced java ppt
advanced java ppt
 
Java Threads: Lightweight Processes
Java Threads: Lightweight ProcessesJava Threads: Lightweight Processes
Java Threads: Lightweight Processes
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
JAVA THREADS.pdf
JAVA THREADS.pdfJAVA THREADS.pdf
JAVA THREADS.pdf
 
Multithreading
MultithreadingMultithreading
Multithreading
 

Plus de Riccardo Cardin

Plus de Riccardo Cardin (7)

Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
Diagrammi di Attività
Diagrammi di AttivitàDiagrammi di Attività
Diagrammi di Attività
 
Diagrammi Use Case
Diagrammi Use CaseDiagrammi Use Case
Diagrammi Use Case
 
Introduzione a UML
Introduzione a UMLIntroduzione a UML
Introduzione a UML
 
Mvc e di spring e angular js
Mvc e di   spring e angular jsMvc e di   spring e angular js
Mvc e di spring e angular js
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principles
 

Dernier

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Dernier (20)

VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 

Java - Concurrent programming - Thread's basics

  • 1. CONCURRENT PROGRAMMING THREAD’S BASICS PROGRAMMAZIONE CONCORRENTE E DISTR. Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2015 – 2016 rcardin@math.unipd.it
  • 2. Programmazione concorrente e distribuita SUMMARY  Introduction  Thread basics  Thread properties  Thread states  Thread interruption  Sequence diagrams 2Riccardo Cardin
  • 3. Programmazione concorrente e distribuita INTRODUCTION  Multitasking  The ability to have more than a program working at what seems like the same time  The unity of this type of programming is a process  A process has its own variables  Communication between process is accomplished using messages sent over a common channel (i.e. a socket)  Very hard to accomplish and no so performant  Types  Cooperative: CPU control is left to the processes  Time-sliced: the OS (scheduler) assigns a time slice to each process 3Riccardo Cardin
  • 4. Programmazione concorrente e distribuita INTRODUCTION  Multithread  A programming model that allows multiple threads to exists within the same context of a single process  Every process will appear to do multiple tasks  Threads share the same data and variables  Every process as a main thread  This thread can create other threads, called secondary  Every thread as a priority order (1 .. 10)  Types  Cooperative  Time-sliced: thread scheduling is left to the main thread, that uses OS utilities 4Riccardo Cardin
  • 5. Programmazione concorrente e distribuita INTRODUCTION 5Riccardo Cardin
  • 6. Programmazione concorrente e distribuita INTRODUCTION 6Riccardo Cardin Process Memory Thread 1 Task Task Thread 2 Task Thread 3 Task Threads share the same memory chunks Every thread could be reused to execute different tasksThreads are lighter than processes, even so their creation is still time- consuming Each process can execute many threads Threads are a mechanism provided by the OS
  • 7. Programmazione concorrente e distribuita DEFINITION  Multithread programming  A programming model that allows multiple threads to exists within the same context of a single process  Responsiveness  Faster execution  Lower resource consumption  Parallelization  Java has built-in support for concurrent programming 7Riccardo Cardin A thread is the smallest sequence of programmed instructions that can be managed independently. Multiple thread can exist within the same process, executing concurrently and share resources such as memory. - Wikipedia
  • 8. Programmazione concorrente e distribuita THREAD BASICS  Threads in Java are the primitives that actually execute tasks  Runnable interface describes a task you want to run, usually concurrently with others  The code of the run method will be executed in a thread  Tasks are short lived, so you don’t waste the time to start a thread 8Riccardo Cardin public interface Runnable { void run(); } Runnable task = () -> { int i = 0; while (i < 1000) i++; } new Thread(task).start(); // A thread running a task
  • 9. Programmazione concorrente e distribuita THREAD BASICS  You should decouple the task that is to be run in parallel from the mechanism of running it  You can also define a subclass of Thread, but this approach is no longer recommended  If you have many task is to expensive create a single thread for each one  Do not call the run method on Thread or Runnable instances  The task is merely executed in the same thread 9Riccardo Cardin class MyThread extends Thread { public void run() { // task code, don’t do this!!! } }
  • 10. Programmazione concorrente e distribuita THREAD BASICS 10Riccardo Cardin
  • 11. Programmazione concorrente e distribuita THREAD BASICS  The main method executes in the main thread  From the main thread they can be executed other thread, called secondary  They execute in pararrel wrt the main thread  Threads can be of two type  User threads  JVM stops when there are no more user thread executing  Deamon threads  A deamon stops when its user thread stops 11Riccardo Cardin public class Example { public static void main(String[] args) { // This code runs inside the main thread } }
  • 12. Programmazione concorrente e distribuita THREAD PROPERTIES  Thread priorities  Use setPriority method to give a thread a priority  MIN_PRIORITY = 1 and MAX_PRIORITY = 10  Don’t use priorities, they are too highly system-dependent  Deamon threads  Use setDeamon method  Its only role is to serve other threads  When only deamon threads remain, the JVM exits  Handlers for uncaught exceptions  The run method cannot throw any checked ex.  Install an UncaughtExceptionHandler to manage ex. 12Riccardo Cardin
  • 13. Programmazione concorrente e distribuita THREAD STATES  6 thread states  New  Runnable  Blocked  Waiting  Time waiting  Terminated  Use getState method  Thread.State 13 No resources associated Runnable ≠ Running
  • 14. Programmazione concorrente e distribuita THREAD STATES  New threads  Just created with the new operator. Not yet running  Runnable threads  Once the start method is invoked.  Resource creation, scheduling  run method is invoked  It may or not actually be running  DO NOT CALL RUN METHOD DIRECTLY! 14Riccardo Cardin public static void main(String[] args) { // Not concurrent, but sequential new MyThread().run(); for (int i = 0; i < 200; i++) System.out.println("Cycle - " + i); }
  • 15. Programmazione concorrente e distribuita THREAD STATES  Blocked and Waiting threads  Temporarily inactive  A thread becomes blocked when it tries to acquire an intrinsic object lock  When a thread waits for another thread to notify of a condition, it enters the waiting state  The calling of a timeout parameters causes the thread to enter the timed waiting (Thread.sleep)  A thread waits for another thread to finish, calling the join method on it  Terminated threads  It is not possible to reborn a thread in this state 15Riccardo Cardin
  • 16. Programmazione concorrente e distribuita THREADS INTERRUPTION  A thread terminates when it’s run method:  Returns by executing a return statement  After executing the last statement in method body  If an unhandled exception occurs  It is possible to send an interruption request  Use the interrupt method  Thread states becomes interrupted, but thread is not interrupted by the JVM  Thread should check whether it has been interrupted 16Riccardo Cardin while (!Thread.currentThread().isInterrupted() && more work to do) { // do more work }
  • 17. Programmazione concorrente e distribuita THREADS INTERRUPTION  Waiting for another thread to finish  Use join() or join(long millis)  An instance of the joining thread must be available  Passing a time interval to the method has the effect to limit the waiting period to millis milliseconds 17Riccardo Cardin Thread thread = new Thread(() -> { // Do some heavy work }); thread.start(); try { // Waiting for at max 1 second the termination of thread thread.join(1000L); } catch(InterruptedException e) { // thread was interrupted during sleep } finally { // cleanup, if required }
  • 18. Programmazione concorrente e distribuita THREADS INTERRUPTION  Implementing collaborative preemption  Thread.yield() notifies the system that the current thread is willing to "give up the CPU" for a while.  Thread scheduler will select a different thread to run  If no other thread is present, the statement has no effect  When to use yield()? Practically NEVER  Use Thread.sleep() (requires some self-computation)  Use synchronization mechanisms if waiting for a process or a resource 18Riccardo Cardin while ( /* more work to do */ ) { // do more work Thread.yield(); }
  • 19. Programmazione concorrente e distribuita THREADS INTERRUPTION  Interrupting a thread simply grabs its attention  Use Thread.sleep(long time) to suspend temporarily the thread  If the interrupted thread was sleeping or waiting for something, an InterruptedException is thrown  ...and the thread status is cleared! 19Riccardo Cardin try { while ( /* more work to do */ ) { // do more work Thread.sleep(delay); } } catch(InterruptedException e) { // thread was interrupted during sleep } finally { // cleanup, if required }
  • 20. Programmazione concorrente e distribuita THREADS INTERRUPTION 20Riccardo Cardin
  • 21. Programmazione concorrente e distribuita SEQUENCE DIAGRAMS  How can we reason about thread visually?  UML gives use sequence diagrams 21Riccardo Cardin Partecipant Timepassing Life line
  • 22. Programmazione concorrente e distribuita SEQUENCE DIAGRAMS 22Riccardo Cardin A sequence diagram describes the cooperation between a group of objects that have to interact with each other to fulfill an objective Definition Message Find message Internal call Return Object creation
  • 23. Programmazione concorrente e distribuita EXAMPLES 23Riccardo Cardin https://github.com/rcardin/pcd-snippets
  • 24. Programmazione concorrente e distribuita REFERENCES  Chap. 14 «Multithreading», Core Java Volume I - Fundamentals, Cay Horstmann, Gary Cornell, 2012, Prentice Hall  Thread.yield http://www.javamex.com/tutorials/threads/yield.shtml  What are the main uses of yield(), and how does it differ from join() and interrupt()? http://stackoverflow.com/questions/6979796/what-are-the-main- uses-of-yield-and-how-does-it-differ-from-join-and-interr  Chap. 10 «Concurrent Programming», Core Java for the Impatient, Cay Horstmann, 2015, Addison-Wesley 24Riccardo Cardin