How to create Threads? There are two ways of creating threads – one by extending the Thread class and other by creating a thread with a Runnable example ``` class MultithreadingDemo extends Thread { public void run() { try { // Displaying the thread that is running System.out.println( "Thread " + Thread.currentThread().getId() + " is running"); } catch (Exception e) { // Throwing an exception System.out.println("Exception is caught"); } } } // Main Class public class Multithread { public static void main(String[] args) { int n = 8; // Number of threads for (int i = 0; i < n; i++) { MultithreadingDemo object = new MultithreadingDemo(); object.start(); } } } ``` by using runnable interface ``` class MultithreadingDemo implements Runnable { public void run() { try { // Displaying the thread that is running System.out.println( "Thread " + Thread.currentThread().getId() + " is running"); } catch (Exception e) { // Throwing an exception System.out.println("Exception is caught"); } } } // Main Class public class Multithread { public static void main(String[] args) { int n = 8; // Number of threads for (int i = 0; i < n; i++) { MultithreadingDemo object = new MultithreadingDemo(); Thread t = new Thread(object); t.start(); } } } ``` so when to use which? Use Thread when: You only need to manage the thread's lifecycle and don't need to extend another class. Use Runnable when: You need to extend another class along with implementing multithreading capabilities. You want to create a reusable task that can be executed by multiple threads. So what is the existing problem with thread and runnable ? enter callable and futures ``` import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class MultithreadingDemo implements Callable<String> { @Override public String call() { try { // Displaying the thread that is running System.out.println("Thread " + Thread.currentThread().getId() + " is running"); return "Task result"; // You can return a value from call() } catch (Exception e) { e.printStackTrace(); } return null; } } public class Multithread { public static void main(String[] args) throws Exception { int n = 8; // Number of threads // Create an ExecutorService (e.g., fixed thread pool) ExecutorService executor = Executors.newFixedThreadPool(n); // Array to store Future objects Future<String>[] futures = new Future[n]; // Submit tasks (Callable objects) to the ExecutorService for (int i = 0; i < n; i++) { MultithreadingDemo task = new MultithreadingDemo(); futures[i] = executor.submit(task); } // Optionally retrieve results from the Future objects for (Future<String> future : futures) { try { String result = future.get(); // Blocks until the task finishes System.out.println("Result from thread " + future.get() + ": " + result); } catch (InterruptedException e) { e.printStackTrace(); } } // Shutdown the ExecutorService (optional) executor.shutdown(); } } ``` interview questions ``` Input: Stream = {5, 13, 4, 21, 13, 27, 2, 59, 59, 34} Output: [59, 13] Input: Stream = {5, 13, 4, 21, 27, 2, 59, 34} Output: [] method 1 import java.util.*; import java.util.stream.*; public class Duplicate { public static <T> Set<T> findDuplicateInStream(Stream<T> stream) { } // Driver code public static void main(String[] args) { Stream<Integer> stream = Stream.of(5, 13, 4, 21, 13, 27, 2, 59, 59, 34); System.out.println( findDuplicateInStream(stream)); } } ``` ****************************************** ``` import static java.util.stream.Collectors.*; import java.lang.*; import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; class sortmapKey { static Map<String, Integer> map = new HashMap<>(); public static void sortbykey() { } public static void main(String args[]) { map.put("Ketan", 80); map.put("Rishi", 90); map.put(null, 1); map.put(null, 2); sortbykey();}} ``` ////////////////////////////////////////////// was able to code and explain the logic behind the code yes /no Was able to explain basic OOPS concept yes /no was able to explain a debugging steps yes /no Was able to explain concepts of Spring , Rest API yes /no Feels like has working experience in real project yes /no Was able to communicate yes /no was able to understand the question yes /no English looks good yes /no was answering to the point yes /no On time for interview yes /no Was eager towards the interview yes /no Smiled in an interview yes /no