Top Banner
Mar 14, 2 022 Threads and Multithreading
25

22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

Apr 18, 2023

Threads and Multithreading

Page 2: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

2

Multiprocessing

Modern operating systems are multiprocessing Appear to do more than one thing at a time Three general approaches:

Cooperative multiprocessing Preemptive multiprocessing Really having multiple processors

Page 3: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

3

Multithreading

Multithreading programs appear to do more than one thing at a time

Same ideas as multiprocessing, but within a single program

More efficient than multiprocessing Java tries to hide the underlying multiprocessing

implementation

Page 4: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

4

Why multithreading?

Allows you to do more than one thing at once Play music on your computer’s CD player, Download several files in the background, while you are writing a letter

Multithreading is essential for animation One thread does the animation Another thread responds to user inputs

Page 5: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

5

Threads

A Thread is a single flow of control When you step through a program, you are following a

Thread Your previous programs all had one Thread A Thread is an Object you can create and control

Page 6: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

6

Sleeping

Every program uses at least one Thread

Thread.sleep(int milliseconds); A millisecond is 1/1000 of a second

try { Thread.sleep(1000); }catch (InterruptedException e) { }

sleep only works for the current Thread

Page 7: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

7

States of a Thread

A Thread can be in one of four states: Ready: all set to run Running: actually doing something Waiting, or blocked: needs something Dead: will never do anything again

State names vary across textbooks You have some control, but the Java scheduler has more

Page 8: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

8

State transitions

ready

waiting

running deadstart

Page 9: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

9

Two ways of creating Threads

The easy way: Extend the Thread class:

class Animation extends Thread {…} And override public void run() You can only extend one class, so if your class already extends

some other class, you can’t do this

The more general way: Implement the Runnable interface:

class Animation implements Runnable {…} Override public void run( ) Create a new Thread with this class as a parameter

Most of the time, you need to do things the second way

Page 10: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

10

Extending Thread

class Animation extends Thread { public void run( ) { code for this thread } Anything else you want in this class}

Animation anim = new Animation( ); A newly created Thread is in the Ready state

To start the anim Thread running, call anim.start( ); start( ) is a request to the scheduler to run the Thread --it

may not happen right away The Thread should eventually enter the Running state

Page 11: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

11

Implementing Runnable

class Animation implements Runnable {…} The Runnable interface requires run( )

This is the “main” method of your new Thread Animation anim = new Animation( ); Thread myThread = new Thread(anim); To start the Thread running, call myThread.start( );

You do not write the start() method—it’s provided by Java

As always, start( ) is a request to the scheduler to run the Thread--it may not happen right away

Page 12: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

12

Starting a Thread

Every Thread has a start( ) method Do not write or override start( ) You call start( ) to request a Thread to run The scheduler then (eventually) calls run( ) You must supply public void run( )

This is where you put the code that the Thread is going to run

Page 13: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

13

Extending Thread: summary

class Animation extends Thread { public void run( ) { while (okToRun) { ... } }}

Animation anim = new Animation( );anim.start( );

Page 14: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

14

Implementing Runnable: summary

class Animation extends Applet implements Runnable { public void run( ) { while (okToRun) { ... } }}

Animation anim = new Animation( );Thread myThread = new Thread(anim);myThread.start( );

Page 15: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

15

Two kinds of Threads

There are two kinds of Threads in Java: Nondaemon threads

These are “independent” threads, which run until they reach a stopping point (for example, the end of your main method)

Whenever you start a program, you get one nondaemon thread When you create a GUI, you get another nondaemon thread

Daemon threads These are threads which die when all nondaemon threads finish The Java VM exits when only daemon threads are still running There are methods setDaemon(boolean) and boolean

isDaemon() The System.exit(int) method kills all threads

Page 16: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

16

Things a Thread can do

Thread.sleep(milliseconds) yield( ) Thread me = currentThread( ); int myPriority = me.getPriority( ); me.setPriority(NORM_PRIORITY); if (otherThread.isAlive( )) { … } join(otherThread);

Page 17: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

17

Animation requires two Threads

Suppose you set up Buttons and attach Listeners to those buttons...

…then your code goes into a loop doing the animation…

…who’s listening? Not this code; it’s busy doing the animation

sleep(ms) doesn’t help!

Page 18: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

18

How to animate

Create your buttons and attach listeners in your first (original) Thread

Create a second Thread to run the animation Start the animation The original Thread is free to listen to the buttons

However, Whenever you have a GUI, Java automatically creates a

second (nondaemon) Thread for you You only have to do this yourself for more complex programs

Page 19: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

19

Things a Thread should NOT do

The Thread controls its own destiny Deprecated methods:

myThread.stop( ) myThread.suspend( ) myThread.resume( )

Outside control turned out to be a Bad Idea Don’t do this!

Page 20: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

20

How to stop another Thread

Don’t use the deprecated methods! Instead, put a request where the other Thread can

find it boolean okToRun = true;

animation.start( );

public void run( ) { while (okToRun) {...main loop...}

Page 21: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

21

How to pause another Thread Don’t use the deprecated methods! Instead, put a request where the other Thread can find it

boolean paused = false;

public void run( ) { while (okToRun) { while (paused) { try { Thread.sleep(100); } catch (InterruptedException e) { } } ...main loop... }}

Page 22: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

22

A problem

What gets printed as the value of k? This is a trivial example of what is, in general, a

very difficult problem

int k = 0;

Thread #1: k = k + 1;

Thread #2: System.out.print(k);

Page 23: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

23

Tools for a solution

You can synchronize an object: synchronized (obj) { ...code that uses/modifies obj... } No other code can use or modify this object at the same time

You can synchronize a method: synchronized void addOne(arg1, arg2, ...) { code } Only one synchronized method in a class can be used at a time

(other methods can be used simultaneously) Synchronization is a tool, not a solution—

multithreading is in general a very hard problem

Page 24: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

24

wait(), notify(), notifyAll() A somewhat better, but more complex, alternative to

sleeping and occasionally waking up to check whether to continue is to use wait() and either notify() or notifyAll()

Like sleep, wait puts the current Thread into a waiting state

Unlike sleep, wait allows the Thread to be “waked up” from outside notify() tells a particular Thread to wake up notifyAll() tells all Threads to wake up

These methods can only be used within synchronized methods, and as a result are quite tricky to get right

Page 25: 22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.

25

The End