I am new to threads. I read an article from https://www.math.uni-hamburg.de/doc/java/tutorial/essential/threads/definition.html
"A thread is a single sequential flow of control within a program." It is still intangible to me, it would be very helpful if someone can give another example and explain more.
Then I check out some examples with the following code.
class SimpleThread extends Thread {
public SimpleThread(String str) {
super(str);
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i + " " + getName());
try {
# sleep((int)(Math.random() * 1000));
/* I have changed Math.random() to 0.5 so that all will sleep with same amount of time */
sleep((int)(0.5 * 1000));
} catch (InterruptedException e) {}
}
System.out.println("DONE! " + getName());
}
}
class ThreeThreadsTest {
public static void main (String[] args) {
new SimpleThread("Jamaica").start();
new SimpleThread("Fiji").start();
new SimpleThread("Bora Bora").start();
}
}
In the main function of ThreeThreadsTest, the three threads are created one by one, the result should follow a pattern like this:
0 Jamaica
0 Fiji
0 Bora Bora
1 Jamaica
1 Fiji
1 Bora Bora
2 Jamaica
2 Fiji
2 Bora Bora ...
but instead the result is like this:
0 Jamaica
0 Bora Bora
0 Fiji
1 Jamaica
1 Bora Bora
1 Fiji
2 Jamaica
2 Fiji
2 Bora Bora
3 Jamaica
3 Fiji
3 Bora Bora
4 Bora Bora
4 Jamaica
4 Fiji
5 Bora Bora
5 Jamaica
5 Fiji
6 Bora Bora
6 Jamaica
6 Fiji
7 Bora Bora
7 Fiji
7 Jamaica
8 Bora Bora
8 Jamaica
8 Fiji
9 Bora Bora
9 Fiji
9 Jamaica
DONE! Fiji
DONE! Bora Bora
DONE! Jamaica
Can someone explain why this will happen?
Thread.start()
puts a thread into a queue of threads which are ready to be executed. Then OS picks any of ready threads and executes it. There's no warranty which thread will be picked the next, so the order of execution is rather random.