Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a...

47
1 4/27/12 Object-Oriented Programming Introduction to Java Threads 4003-243

Transcript of Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a...

Page 1: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

1

4/27/12

Object-Oriented Programming

Introduction to Java Threads

4003-243

Page 2: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

2

4/27/12

What is a Process?

● Here’s what happens when you run this Java program and launch 3 instances while monitoring with top

● On a single CPU architecture, the operating system manages how processes share CPU time

java #1

java #2

java #3

Others…

process

time

public class MyProgram { public static void main(String args[]) { int i = 0; while ( true ) { i = i + 1; } }}

Page 3: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

3

4/27/12

What is a Process?

● Besides running your program, the Java interpreter process must do other tasks– Example: manage memory for your code,

including garbage collection● How does the interpreter perform multiple

tasks within a single process?

threads

Page 4: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

4

4/27/12

What is a Thread?

● A thread is a flow of execution● Java has built-in multithreading

– Multiple tasks run concurrently in 1 process● Multiple processes and threads share CPU

time

Process #1 T1 T2 T3

Process #2 T2 T3 T1 T4

T3

Page 5: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

5

4/27/12

Java Threads

● When a program executes, the JVM starts a thread to run main() – This is the “main thread” of execution

• Each thread is an instance of a class that:– EITHER Extends the Thread class,

– OR Implements the Runnable interface

• The new object is a runnable object– Another name used is active object

Page 6: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

6

4/27/12

Creating Threads by Extending Thread

● An example class that extends the Thread

// Custom thread classpublic class MyThread extends Thread { public MyThread(…) {

… }

// Override the run method // in Thread public void run() {

// Run the thread…

}}

// Client classpublic class Client { public void method(…) { // Create thread1 MyThread t1 = new

MyThread(…);

// Start thread1 t1.start();

// Create thread2 MyThread t2 = new

MyThread(…);

// Start thread2 t2.start(); }}

Java.lang.Thread MyThread

Page 7: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

7

4/27/12

Creating Threads by Extending Thread● A program to create and run 3 threads

– First thread prints the letter a 5000 times– Second thread prints the letter b 5000 times– Third thread prints integers 1 through 5000

● Make one thread class to handle the first two threads, PrintChar

● The third thread will be implemented by the PrintNum class

● See TestThread/TestThread.java

Page 8: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

8

4/27/12

Creating Threads by Implementing Runnable● An active class may implement the Runnable interface

// Custom thread classpublic class MyThread implements Runnable { public MyThread(…) {

… }

// Override the run method // in Thread public void run() {

// Run the thread…

}}

// Client classpublic class Client { public void method(…) { // Create thread1 Thread t1 = new Thread (

new MyThread(…));

// Start thread1 t1.start();

// Create thread2 Thread t2 = new Thread (

new MyThread(…));

// Start thread2 t2.start(); }}

Java.lang.Runnable MyThread

Page 9: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

9

4/27/12

Creating Threads by Implementing Runnable

● If a runnable class already inherits from a specific superclass, it must implement the Runnable interface– The interface specifies one method: run()

● Wrap the runnable class in a Thread object to use it

Thread t1 = new Thread( new PrintChar( ‘a’, 5000 ) );Thread t2 = new Thread( new PrintChar( ‘b’, 5000 ) );Thread t3 = new Thread( new PrintInt( 5000 ) );

– See TestRunnable/TestRunnable.java

Page 10: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

10

4/27/12

Thread : Selected Methods

+ Thread()+ Thread(target : Runnable)+ run() : void+ start() : void+ interrupt() : void+ isAlive() : boolean+ setPriority(p : int) : void+ join() : void+ sleep(millis : long) : void+ yield() : void+ isInterrupted() : boolean+ currentThread() : Thread

java.lang.Thread

java.lang.Runnable

Underlined methods are static

Page 11: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

11

4/27/12

Thread Control - yield

● Use yield() to release the CPU● See TestYield/TestYield.java

Thread #1 T1

Thread #2 T2

T1 yields

T1

T2 yields

Page 12: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

12

4/27/12

Thread Control - sleep

• sleep() pauses thread execution for a specified number of milliseconds

● See TestSleep/TestSleep.java

Thread #1 T1

Thread #2 T2

sleep( 500 )

T1

Time's up. T1 wakes and runs

T2 executes T2 stops executing

ZzZz…waiting...ZzZz...

Page 13: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

13

4/27/12

Thread Control - join

● join() makes one thread wait for another thread to finish

● See TestJoin/TestJoin.java

Thread T1 T1

Thread T2 T2

T2.join()

T1

T1 resumes

T2 finishes

T2

Thread T3 T3 T3

Thread has terminated

Page 14: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

14

4/27/12

Thread States

● The JVM manages thread scheduling and execution using thread states

● Runnable is the only state in which the thread may be executing on the CPU– On a single core/processor system, only one

thread is actually running at any moment● Other thread states record the situation of

a thread with respect to its execution• t.isAlive() returns true if the thread

is not in the New or Terminated state

Page 15: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

15

4/27/12

Java Thread States

start()

run() or scheduled

yield() or timeout

run()returns

join()

sleep(t)

wait()

new Thread()

wait(t)join(t)notifyAll()

notify()

New

Runnable

Blocked

(Running*)

Thread tries to access a locked, synchronized block

*NOTE: Running is not an actual Thread.State enum value. It represents the thread currently executing.

Block becomes unlocked

Terminated

Page 16: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

16

4/27/12

• This solution works, but there is a better way!

isAlive()

public class WorkerThread extends Thread { private int result = 0;

public void run() { // Perform a complicated, time-consuming calculation // and store the answer in the variable result }

public static void main(String args[]) { WorkerThread t = new WorkerThread(); t.start();

while ( t.isAlive() ) { } System.out.println( result ); }

What happens if this statement is left out?

Page 17: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

17

4/27/12

Introduction to Threads

Coordinating Thread Execution

Page 18: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

18

4/27/12

Threads and Methods

● If multiple threads run inside a program, they might call the same method

● If they call the same method at the same time, what happens? The threads could: – Read different results from member fields– Overwrite field values with incorrect values

● To make sure only one thread executes inside a method, you must lock the object – The synchronized keyword, when applied

to a method, locks the object instance

Page 19: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

19

4/27/12

Resource Conflict Scenario

● Example Situation:– A program launches 100 threads, each of

which adds a penny to an account – Assume the account is initially empty

● What might happen?

+ run() : void

AddAPenny

java.lang.Thread

- bank : Account- Thread : Thread[]

+ main(args : String[]) : void

AccountConflict

+ balance : int

+ getBalance() : int+ deposit(amt : int) : void

Account100

Page 20: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

20

4/27/12

Resource Conflict Scenario

● One thread could update the value of the common, shared balance before other(s) complete their update individually– This is called a race condition– A class is thread-safe if it does not cause a

race condition in the presence of multiple threads

Step Balance Thread[ 0 ] Thread[ 1 ]In execution Actions Actions

1 02 03 14 1

newBalance = balance+1newBalance = balance+1

balance = newBalancebalance = newBalance

Page 21: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

21

4/27/12

Critical Region

● To avoid race conditions, program code must prevent more than one thread from executing in a critical region – Code in this region may change shared state

● Only one thread must be allowed to enter the deposit method at a time

public void deposit(int amount) { int newBalance = balance + amount;

balance = newBalance; }

Risky, unsynchronized version of Account.deposit():

Page 22: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

22

4/27/12

Synchronizing Instance Methods

● To synchronize an instance method means a thread must get a lock on the instance before beginning to execute it– Makes deposit thread-safe in Account

class AddAPenny implements Runnable { public void run() { account.deposit(1); } }

class AddAPenny:

Synchronize on the account object

public class Account { ... public synchronized void deposit(int amount) { … }}

Page 23: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

23

4/27/12

Synchronizing Instance Methods● The scenario with synchronization:

– Thread 0 gets there first; thread 1 blocksThread[0]

Acquire lock on account

Enter deposit

Release the lock

Thread[1]

Acquires lock on account

Enter deposit

Release the lock

Blocks trying to acquire lock on account

balance = 1

balance = 2

Thread[1] cannot execute here

Page 24: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

24

4/27/12

Thread Synchronization

● These programs illustrate and solve the resource conflict problem:– AccountConflict.java

● 100 threads add a penny to one account● Lack of synchronization loses money

– AccountSync.java● 100 threads add a penny without error● A synchronized method keeps threads from corrupting the state of the Account

– See Synchronization/*.java

Page 25: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

25

4/27/12

Synchronized Statements

● A synchronized block can lock inside a portion of a method – This may shorten lock time to increase

concurrency and improve performance– Smaller critical region � better performance

class Account { public void deposit( int amt ) { synchronized( this ) { int newBalance = balance + amount; Balance = newBalance; } } }

In AccountSync.java

Page 26: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

26

4/27/12

Contention & Starvation

● A situation known as contention may occur when threads compete for execution time on the CPU– A thread might not give other threads a

chance to run● That may lead to starvation

● What's needed are ways to make threads coordinate and cooperate with each other

Page 27: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

27

4/27/12

Thread Cooperation – wait(), notify() and notifyAll()● Three Object methods support

coordination among active threads– Object.wait() blocks a thread– Object.notify() 'wakes up' a thread

waiting on some condition– Object.notifyAll() wakes up all threads

waiting on some condition● These methods must be called inside a synchronized method or block that has locked the object instance

Page 28: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

28

4/27/12

Thread Cooperation – wait(), notify() and notifyAll()● public final void wait()

throws InterruptedException

– Forces the thread to wait until a notify or notifyAll method is called on the object

– If notify never happens, thread blocks forever• public final void notify()

– Awakens one thread waiting on the object– Which one wakens is

implementation dependent• public final void notifyAll()

– Wakes all threads waiting on the object– Scheduling decides which gets notified first

Page 29: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

29

4/27/12

Thread Cooperation – wait(), notify() and notifyAll()

Thread #1 T1

Thread #2 T2

obj.wait()

T1

T1 notified and resumes

obj.notify()

T2

Thread #3

obj.wait()

T2

Threads running within one process

T3 is still waiting...

T3

Page 30: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

30

4/27/12

Threads and Interruptions

● A thread may be interrupted– If the thread is not alive, there's no effect– If the thread is in the Runnable state:

● Set its interrupted status and move it to Blocked– If the thread is Blocked:

● Interrupt clears the thread's interrupted status● Throws an InterruptedException

– The thread's Blocked state has been interrupted● Result: wait(), sleep() and join() calls require try {…} catch (InterruptedException exc) syntax

Page 31: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

31

4/27/12

Thread Cooperation

● Synchronization ensures mutual exclusion in critical regions to avoid race conditions

● Threads also need a way to cooperate without requiring threads to finish– The wait/notify mechanisms can coordinate

the execution of multiple threads● Calls to wait(), notify() and notifyAll() must be in a synchronized method or block– Otherwise: IllegalMonitorStateException

Page 32: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

32

4/27/12

Java’s Monitor : AThread Cooperation construct● Two kinds of thread synchronization are:

– Mutual exclusion uses synchronized to keep threads from interfering with one another when sharing data

– Cooperation uses wait and notify to allow threads to safely coordinate and share data

● The structure that Java uses to support synchronization is called a monitor – A monitor controls access to data and

coordinates multiple threads' use of data– A room where 1 thread executes at a time

Page 33: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

33

4/27/12

Monitor Structure

● The monitor structure combines synchronized, wait and notify to coordinate

synchronized methodA(){ while ( condition ) { try { // Wait for condition this.wait(); } catch (InterruptedException ex){ ex.printStackTrace(); } } // Do something critical…}

synchronized methodB(){ // Do things…

// When condition is // false, then this.notify();}

Resumes

Or this.notifyAll() to wake up all threads waiting on this aMonitor

Thread 1 executing aMonitor.methodAThread 2 executing aMonitor.methodB

Page 34: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

34

4/27/12

Producer-Consumer

● The producer-consumer threading problem is a classic in operating systems– The producer creates new elements and

sends them to one or more consumers– A consumer takes an element out of the

collection, when available, and uses it

● Carefully design a solution to avoid:– Producer sending items that consumers miss– Consumer getting the same item many times

Page 35: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

35

4/27/12

Producer-Consumer

- cubbyHole : CubbyHole- number : int

+ run() : void

Producer

- cubbyHole : CubbyHole- number : int

+ run() : void

Consumer

- contents : int- available : boolean

+ get() : int+ put() : int

CubbyHole

+ main(args : String[]) : void

ProducerConsumerTest

● See ProducerConsumer1/ ProducerConsumer2/ and ProducerConsumer3/

General structure

Page 36: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

36

4/27/12

Consumer Waiting BehaviortheProducer:Producer

theCubby:CubbyHole

theConsumer:Consumer

What happens when the producer tries to put when the cubby hole is 'not full' -- i.e. there is space to put more.

When the consumer tries to get when nothingis available, the cubbyhole monitor makes the consumer's thread wait.

when the producer thread comes along, it is able to immediately put in the value. Then it must notify any threads that may be waiting for that data.

Notification from the producer's putoperation finally causes the consumer to come out of its wait and get the newly available data value.This is NOT A SECOND get() call; the thread was blocked waiting for something to notify the (consumer) thread when there is a new value available.

1.0 int= get()

1.1 [available == false ] wait

1.2 put(value)

1.3 [available == false ] notifyAll

1.4 int= get()

1.5 notifyAll

1.6 [available == true ] value

Name:Package:Version:Author:

Consume 1Dynamic View1.0BKSteele

In this sequence, the consumer must wait.

Page 37: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

37

4/27/12

Producer Waiting Behavior

What happens when the producer tries to put when the cubby hole is 'not full' -- i.e. there is space to put more.

theProducer:Producer

theCubby:CubbyHole

theConsumer:Consumer

Notification from the consumer's get operation finally causes the producer to come out of its wait and put another data value into the cubby.This is NOT A SECOND put() call; the thread was blocked waiting for something to notify the (producer) thread when the cubby can accept the put of a new value.

A consumer eventually comes along to get what's in the cubby and notify any waiting threads after changing the cubby's available state to false.

1.0 put(value)

1.1 [available == true]: wait

2.0 int= get()

2.1 notifyAll

2.2 value

3.0 put(value)

3.1 [available == false] proceed to put

Name:Package:Version:Author:

Produce 1Dynamic View1.0BKSteele

In this sequence, the producer must wait.

Page 38: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

38

4/27/12

Introduction to Threads

Threads and Swing

When an event occurs, how does the listener code execute?

Who is executing these GUI event handlers?

The short answer is: Threads

Page 39: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

39

4/27/12

AWT Event Thread

• All GUI tasks are handled by a single thread: the AWT event dispatcher

• The code in a listener actually executes within the event dispatching thread

AWT event thread

actionPerformed(ActionEvent e)

draw a JButton

Page 40: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

40

4/27/12

AWT Event Thread

● What code should the AWT thread run?– It is good to do things in an AWT handler

that cause GUI components to be redrawn

AWT event thread

actionPerformed(ActionEvent e)

draw a JButton

update a text area

Page 41: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

41

4/27/12

AWT Event Thread

● What if another thread has GUI work?– Example: update a component

● Need: schedule GUI work on the main event thread or risk erroneous behavior

AWT event thread

update a JTextArea

user thread

paint a button component

Danger: update outside the AWT event loop

// ok

Page 42: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

42

4/27/12

AWT GUI Event Processing vs. User Processing

● A listener responds to events generated by a thread not running on the main event dispatching thread– AWT event dispatcher may conflict with a user thread

AWT event thread

User thread

doSomething()

User needs to update GUI

update list with data

JList

Danger: update outside AWT event loop

Page 43: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

43

4/27/12

SwingUtilities.invokeLater()

● To schedule a GUI interaction for the event thread, use the non-blocking call:SwingUtilities.invokeLater(Runnable task)

• The Runnable object’s run() method performs the GUI task you want done

• The invokeLater method queues the task object for execution later– The AWT event thread will then execute it

• See javax.swing.SwingUtilities

Page 44: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

44

4/27/12

SwingUtilities.invokeLater()

• SwingUtilities.invokeLater() is a non-blocking call• SwingUtilities.invokeAndWait() blocks current thread

AWT event thread

user thread

doSomething ()

implementationof an operation

updateTask run() // updates JList from right place at right time

JList

SwingUtilities.invokeLater( updateTask)

Page 45: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

45

4/27/12

Nested andAnonymous Classes

SwingUtilities.invokeLater( new Runnable() { // a class and object with no name…

public void run() { ... inputDoc.remove(0, inputDoc.getLength()); ...

} }); // end of invokeLater() call

class DoIt implements Runnable {public void run() {

inputDoc.remove(0, inputDoc.getLength()); }

}SwingUtilities.invokeLater(new DoIt());

Or an anonymous Runnable class can update

Page 46: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

46

4/27/12

Nested and Anonymous Classes

A nested class becomes a separate byte code file as:

OuterClassName$InnerClassName.class

An anonymous class file becomes a numbered .class file:

OuterClassName$1.classOuterClassName$2.class

Page 47: Introduction to Java Threads - cs.rit.eduvcss243/Lectures/09/Threads-java.pdf4 4/27/12 What is a Thread? A thread is a flow of execution Java has built-in multithreading – Multiple

47

4/27/12

Exercise

● What happens with this code fragment?– Will myThread ever run?– How could you make sure myThread runs?

public class ThreadQuestion { public static void main( String args[] ) { new Thread( “myThread” ) { public void run() { System.out.println( “I’m running!” ); } }.start(); }}