This commit is contained in:
Rezak
2026-06-05 14:06:29 +03:30
parent 9e5c715088
commit dc9839c911
5 changed files with 127 additions and 75 deletions
+63
View File
@@ -0,0 +1,63 @@
## 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 (here `main`).
That's why the printed thread name is `main`.
- Calling `start()` actually creates a brand new thread and then runs `run()` inside that new thread.
So the output shows that `Thread-2` is the one executing the code.
- The main difference:
`run()` → synchronous, runs in the caller thread.
`start()` → asynchronous, spawns a separate thread and runs `run()` 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.
Here `main` is 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.
- Reallife examples of daemon threads:
- The **garbage collector** in Java runs in the background but won't stop the JVM from closing.
- **Autosave** 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 extending `Thread`), we can just pass the body of `run()` directly inside `new Thread(...)`.
This makes the code much shorter and easier to read, especially for oneoff tasks.
- Lambdas are perfect for simple jobs, but if the task is complex or needs to be reused, a separate class might be better.