2.2 KiB
Answers to Theoretical Questions
1. start() vs run()
Output:
Calling run()
Running in: main
Calling start()
Running in: Thread-2
-
When we call
run()directly, it's just a normal method call.
No new thread is created – everything happens inside the current thread (heremain).
That's why the printed thread name ismain. -
Calling
start()actually creates a brand new thread and then runsrun()inside that new thread.
So the output shows thatThread-2is the one executing the code. -
The main difference:
run()→ synchronous, runs in the caller thread.
start()→ asynchronous, spawns a separate thread and runsrun()there.
2. Daemon Threads
Program output (when setDaemon(true) is used):
Main thread ends.
Daemon thread running...
(Only a few lines might appear before the program exits.)
-
By marking the thread as a daemon, we tell the JVM: "This thread is doing background work – don't wait for it."
As soon as all user threads finish, the JVM shuts down, even if daemon threads are still running.
Heremainis a user thread, so after it prints its message and ends, the program terminates quickly. -
If we remove
thread.setDaemon(true), the thread becomes a normal user thread.
Then the JVM will wait for it to finish all 20 iterations before exiting.
We'd see"Daemon thread running..."printed 20 times. -
Real‑life examples of daemon threads:
- The garbage collector in Java – runs in the background but won't stop the JVM from closing.
- Auto‑save in a text editor – saves periodically but shouldn't block the program from closing.
3. A shorter way to create threads
Output:
Thread is running using a ...!
-
The
() -> { ... }part is a lambda expression.
It's a compact way to write an anonymous function. -
Instead of creating a whole new class that implements
Runnable(or extendingThread), we can just pass the body ofrun()directly insidenew Thread(...).
This makes the code much shorter and easier to read, especially for one‑off tasks. -
Lambdas are perfect for simple jobs, but if the task is complex or needs to be reused, a separate class might be better.