# Advanced Programing - 8 Report ## Theoretical Questions Answers --- ## 1. start() vs run() ### Output: Calling run() Running in: main Calling start() Running in: Thread-2 ### Explanation When calling "t1.run()" directly, the run method executes in the current thread (main). When calling "t2.start()" , java creates a new thread and executes run() in that thread (Thread-2). ### Difference: |start()|run()| |-------|-----| |Creates new thread|No new thread| |Executes run() in new thread|Executed like nurmal method| |Can only be called once|Can be called multiple times| --- ## Deamon Threads ### Output(with demon): Main thread ends Deamon thread running... (Program terminates quickly) ### Output(without demon): Main thread ends. Deamon thread running... (20 times) ### Explanation A daemon thread is a background thread that does NOT prevent the JVM from exiting. When the main thread (non-daemon) finishes, the JVM checks if there are any non-daemon threads still running. Since only the daemon thread remains, the JVM terminates immediately without waiting for the daemon thread to complete its 20 iterations. Without setDaemon(true), the thread becomes a user thread (non-daemon) . User threads prevent the JVM from exiting until they complete. Therefore, the JVM waits for the thread to finish all 20 iterations before terminating the program. --- ### Real-life use cases: 1. Garbage Collector (GC) 2. Auto-save features 3. Background logging 4. Session cleanup in web servers --- ## 3. Lambda Expressions ### Output: Thread is running using a...! ### What is `() -> {}`? This is a **Lambda Expression** introduced in Java. ### Comparison: | Traditional | Lambda | |-------------|--------| | Needs separate class | No separate class | | More code | Concise | | `new Thread(new Runnable(){...})` | `new Thread(() -> {...})` | ---