java thread: passing parameters to a threadschmidt/cs891s/2020-pdfs/2.2.4-thread-pt… · 2...
TRANSCRIPT
![Page 1: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/1.jpg)
Java Thread:
Passing Parameters to a Thread
Douglas C. [email protected]
www.dre.vanderbilt.edu/~schmidt
Institute for Software
Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
![Page 2: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/2.jpg)
2
• Understand how Java threads support concurrency
• Learn how our case study app works
• Know alternative ways of giving code to a thread
• Learn how to pass parameters to a Java thread
Learning Objectives in this Part of the Lesson
![Page 3: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/3.jpg)
3
Passing Parameters to a Java Thread
![Page 4: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/4.jpg)
4
• The run() methods defined in Java Thread & Runnable take no parameters
Passing Parameters to a Java Thread
This raises the question of how to pass parameters to a Java thread!
![Page 5: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/5.jpg)
5
• Parameters passed to run() can be supplied via one of two other means
Passing Parameters to a Java Thread
![Page 6: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/6.jpg)
6
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
Passing Parameters to a Java Thread
public class GCDRunnable extends Random implements Runnable {
See github.com/douglascraigschmidt/POSA/tree/master/ex/M3/GCD/Concurrent/app/src/main/java/vandy/mooc/gcd/activities/GCDRunnable.java
![Page 7: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/7.jpg)
7
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
Passing Parameters to a Java Thread
public class GCDRunnable extends Random implements Runnable {
private final MainActivity mActivity;
...
Define field(s) to store parameters passed to a runnable or thread object
![Page 8: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/8.jpg)
8
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
Passing Parameters to a Java Thread
public class GCDRunnable extends Random implements Runnable {
private final MainActivity mActivity;
public GCDRunnable(MainActivity mainActivity)
{ mActivity = mainActivity; }
...
Add the parameter(s) to the constructor signature & store them in the field(s)
![Page 9: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/9.jpg)
9
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
Passing Parameters to a Java Thread
public class GCDRunnable extends Random implements Runnable {
private final MainActivity mActivity;
public GCDRunnable(MainActivity mainActivity)
{ mActivity = mainActivity; }
public void run() {
final String threadString =
" with thread id " + Thread.currentThread();
mActivity.println("Entering run()" + threadString);
...
Use the field(s) within the thread’s run() hook method to customize its behavior
![Page 10: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/10.jpg)
10
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
Passing Parameters to a Java Thread
public class GCDRunnable extends Random implements Runnable {
private final MainActivity mActivity;
public GCDRunnable(MainActivity mainActivity)
{ mActivity = mainActivity; }
public void run() {
final String threadString =
" with thread id " + Thread.currentThread();
mActivity.println("Entering run()" + threadString);
...
public class MainActivity ... { ...
public void runRunnable(View v) { ...
new Thread(new GDCRunnable(this));
...
Pass the parameter(s) when the runnable or
thread is created
![Page 11: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/11.jpg)
11
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
See github.com/douglascraigschmidt/POSA/tree/master/ex/M3/GCD/Concurrent/app/src/main/java/vandy/mooc/gcd/activities/GCDThread.java
![Page 12: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/12.jpg)
12
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
private MainActivity mActivity; private Random mRandom;
...
Define field(s) to store parameters passed to a runnable or thread object
![Page 13: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/13.jpg)
13
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
private MainActivity mActivity; private Random mRandom;
public GCDThread setActivity(MainActivity activity)
{ mActivity = activity; return this; }
public GCDThread setRandom(Random random)
{ mRandom = random; return this; }
...
Define setter methods that update field(s)
![Page 14: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/14.jpg)
14
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
private MainActivity mActivity; private Random mRandom;
public GCDThread setActivity(MainActivity activity)
{ mActivity = activity; return this; }
public GCDThread setRandom(Random random)
{ mRandom = random; return this; }
...
See en.wikipedia.org/wiki/Fluent_interface
Note use of “fluent interfaces,” which enables “chaining” of method calls
![Page 15: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/15.jpg)
15
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
private MainActivity mActivity; private Random mRandom;
public GCDThread setActivity(MainActivity activity)
{ mActivity = activity; return this; }
public GCDThread setRandom(Random random)
{ mRandom = random; return this; }
...
public void run() { ...
mActivity.println("Entering run()" + threadString);
...
int number1 = mRandom.nextInt();
int number2 = mRandom.nextInt(); ...
Use the fields within the thread’s run() hook method to customize its behavior
![Page 16: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/16.jpg)
16
• Parameters passed to run() can be supplied via one of two other means, e.g.
• As parameters to a class constructor
• As parameters to “setter” methods
Passing Parameters to a Java Thread
public class GCDThread extends Thread {
...
public class MainActivity ... { ...
public void runThread(View v) { ...
Thread thread =
new GCDThread()
.setActivity(this)
.setRandom(new Random());
...
Use the fluent interface to pass parameter(s) when the runnable or thread is created
![Page 17: Java Thread: Passing Parameters to a Threadschmidt/cs891s/2020-PDFs/2.2.4-Thread-pt… · 2 •Understand how Java threads support concurrency •Learn how our case study app works](https://reader033.vdocuments.site/reader033/viewer/2022052613/604a4fcbfdb72b387302f094/html5/thumbnails/17.jpg)
17
End of Java Thread: Passing Parameters to a Thread