Parallel Comp and Dist Sys
D_ThreadJoin.java
D_ThreadJoin.java
package
Threads_PC_341
;
public
class
D_ThreadJoin
{
public
static
Thread
thread1
;
public
static
Thread
thread2
;
public
static
void
function1
()
throws
InterruptedException
{
//-----------------------Thread 1 is running this function
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running"
);
}
}
public
static
void
function2
()
throws
InterruptedException
{
//-----------------------Thread 2 is running this function
thread1
.
join
();
// Wait for thread1 to finish first
//thread1.join(5000); // Waiting for 5 seconds for thread1 to finish
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running"
);
}
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
/*
join(): is used to start one thread's execution to end of another thread's execution
such that thread B does not start running until thread A ends.
// 1st use: waits for thread A to die.
If any executing thread B calls join() on thread A (i.e; A.join())
Immediately B will enter into waiting state (blocked) until A completes its execution.
// 2nd use: waits at most this much milliseconds for thread A to die
join(long millis) method waits at most this much milliseconds for certain thread to die.
A timeout of 0 means to wait forever
Giving a timeout within join(), will make the join() effect to be nullified after the specific timeout.
*/
thread1
=
new
Thread
(
new
Runnable
()
{
public
void
run
()
{
try
{
function1
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
);
thread1
.
setName
(
"first child"
);
thread2
=
new
Thread
(
new
Runnable
()
{
public
void
run
()
{
try
{
function2
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
);
thread2
.
setName
(
"second child"
);
thread1
.
start
();
thread2
.
start
();
}
}
B_CreateSubThread.java
B_CreateSubThread.java
package
Threads_PC_341
;
public
class
B_CreateSubThread
{
public
static
void
function1
()
{
for
(
int
i
=
0
;
i
<
10
;
i
++
)
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running and value of i: "
+
i
);
}
public
static
void
function2
()
{
for
(
int
j
=
0
;
j
<
10
;
j
++
)
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running and value of j: "
+
j
);
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Main thread and one child thread ..."
);
/*
* Within the main thread, we can now create more "child" thread, who can further create more "child" threads.
*/
Thread
thread1
=
new
Thread
(
//You give the Thread constructor some instance that implements the Runnable interface.
//Once started the Thread will call the Runnable instances run() method is a separate thread.
new
Runnable
()
{
public
void
run
()
{
function1
();
//assign function1 execution to thread1
}
}
);
thread1
.
setName
(
"Child thread"
);
//set a name for this newly created child thread
//-------------------Now lets run function1 in parallel with function2
//-------------------Run function1 on thread1
//-------------------Run Funciton2 on the main thread
thread1
.
start
();
//ask thread1 to run in parallel with the main thread
//, to execute the assigned function (function1)
function2
();
//run function2 on the main thread
}
}
__MACOSX/._B_CreateSubThread.java
C_KillThread.java
C_KillThread.java
package
Threads_PC_341
;
public
class
C_KillThread
{
public
static
void
function1
()
{
while
(
!
Thread
.
interrupted
())
{
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running"
);
//the interrupt cannot occur while sleeping, this will through exception.
//Thread.sleep(1000);
}
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
/*
A thread is automatically destroyed when the run() method is completed.
But it might be required to kill/stop a thread before it completes its life cycle.
Using Thread.interrupt() method:
Whenever an interrupt is sent to a thread, it should stop whatever task it is performing.
*/
Thread
thread1
=
new
Thread
(
new
Runnable
()
{
public
void
run
()
{
function1
();
}
}
);
thread1
.
setName
(
"Thread 1"
);
thread1
.
start
();
Thread
.
sleep
(
2000
);
//Make the main thread sleep for 2 seconds
//In another word, let thread1 work for 2 seconds
//isAlive() tests if certain thread is alive (started and has not yet died).
System
.
out
.
println
(
"Is alive? "
+
thread1
.
isAlive
());
thread1
.
interrupt
();
Thread
.
sleep
(
5000
);
//Make the main thread sleep for 5 seconds
//In another word, give some time for thread1 to be terminated
System
.
out
.
println
(
"Exiting thread1"
);
System
.
out
.
println
(
"Is alive? "
+
thread1
.
isAlive
());
// Checks if this thread is alive
//continue the work of the main thread
System
.
out
.
println
(
"Exiting the main Thread"
);
}
}
A_MainThread.java
A_MainThread.java
package
Threads_PC_341
;
public
class
A_MainThread
{
public
static
void
function1
()
throws
InterruptedException
{
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running and value of i: "
+
i
);
Thread
.
sleep
(
100
);
//you can ask the current running thread to sleep (stop work) for number of milliseconds
}
}
public
static
void
function2
()
throws
InterruptedException
{
for
(
int
j
=
0
;
j
<
10
;
j
++
)
{
System
.
out
.
println
(
"Thread "
+
Thread
.
currentThread
().
getName
()
+
" is running and value of j: "
+
j
);
Thread
.
sleep
(
100
);
//you can ask the current running thread to sleep (stop work) for number of milliseconds
}
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
// When a Java program starts up, one thread starts to run immediately - usually called the main thread of your process.
System
.
out
.
println
(
"Set/Get optional information about the Main Thread....."
);
//To access the current thread (e.g., to change the priority or name), you need to call Thread.currentThread()
Thread
.
currentThread
().
setName
(
"Our Main Thread"
);
System
.
out
.
println
(
"Main thread Name : "
+
Thread
.
currentThread
().
getName
());
System
.
out
.
println
(
"Sequential programming"
);
function1
();
//run function1 first by the main thread
Thread
.
sleep
(
1000
);
//you can ask the current running thread to sleep (stop work) for number of milliseconds
function2
();
//run function2 second by the main thread
Thread
.
sleep
(
1000
);
//you can ask the current running thread to sleep (stop work) for number of milliseconds
System
.
out
.
println
(
"Exiting the main Thread"
);
}
}
__MACOSX/._A_MainThread.java
E_ListsMaps.java
E_ListsMaps.java
package
Threads_PC_341
;
import
java
.
util
.
ArrayList
;
import
java
.
util
.
HashMap
;
public
class
E_ListsMaps
{
public
static
void
main
(
String
[]
args
)
{
ArrayList
<
Integer
>
myList
=
new
ArrayList
<
Integer
>
();
//create a dynamic list of integers
int
size
=
myList
.
size
();
//get the size of the list
myList
.
add
(
5
);
//add new integer element to the list
myList
.
add
(
6
);
//add new integer element to the list
myList
.
add
(
8
);
//add new integer element to the list
int
element
=
myList
.
get
(
1
);
//get the second element in the list
ArrayList
<
Integer
>
firstHalf
=
new
ArrayList
<>
(
myList
.
subList
(
0
,
2
));
//get sublist of myList: elements 0,1
HashMap
<
Integer
,
String
>
map
=
new
HashMap
<
Integer
,
String
>
();
map
.
put
(
100
,
"name1"
);
map
.
put
(
101
,
"name2"
);
map
.
put
(
102
,
"name2"
);
String
element1
=
map
.
get
(
100
);
//get value of this key
boolean
hasKey
=
map
.
containsKey
(
123
);
//check if this map contains such key
}
}