What is the best way to create thread in java: There are two main ways to create a thread in Java:
Best way to create thread in java
- Extending the Thread class: You can create a new class that extends the
Thread
class, and override therun()
method to define the code that should be executed in the new thread. Then you can create an instance of the new class and call itsstart()
method to start the new thread. Here’s an example:
class MyThread extends Thread {
public void run() {
// code to be executed in the new thread
}
}
MyThread thread = new MyThread();
thread.start();
- Implementing the Runnable interface: Alternatively, you can create a new class that implements the
Runnable
interface, and override therun()
method as before. Then you can create an instance of the new class and pass it as an argument to a newThread
object. Finally, you can call thestart()
method on the newThread
object to start the new thread. Here’s an example:
class MyRunnable implements Runnable {
public void run() {
// code to be executed in the new thread
}
}
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
Both approaches are valid and widely used. The second approach is generally preferred because it allows for more flexibility in sharing resources between threads, as multiple threads can share the same Runnable
instance.
Thread in java Example
Sure! Here’s an example of creating a thread in Java using the second approach I mentioned earlier (implementing the Runnable
interface):
public class MyThread implements Runnable {
private int count;
public MyThread(int count) {
this.count = count;
}
public void run() {
System.out.println("Thread " + count + " started.");
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000); // wait for 1 second
System.out.println("Thread " + count + " running...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thread " + count + " finished.");
}
public static void main(String[] args) {
Thread thread1 = new Thread(new MyThread(1));
Thread thread2 = new Thread(new MyThread(2));
thread1.start();
thread2.start();
}
}
In this example, we define a class called MyThread
that implements the Runnable
interface. The class takes an integer count
as a parameter to identify the thread. The run()
method of the class simply waits for 5 seconds and prints a message every second to indicate that the thread is still running.
In the main()
method, we create two Thread
objects, passing in new instances of MyThread
with different count
values. We then start both threads using the start()
method, which causes the run()
method of each MyThread
instance to execute concurrently.
When we run this program, we should see output like the following:
Thread 1 started.
Thread 2 started.
Thread 1 running...
Thread 2 running...
Thread 1 running...
Thread 2 running...
Thread 1 running...
Thread 2 running...
Thread 1 running...
Thread 2 running...
Thread 1 running...
Thread 2 running...
Thread 1 finished.
Thread 2 finished.
This shows that both threads are running concurrently and executing their run()
methods independently of each other.
Thread important Interview Questions With Answers Example
Sure, here are some common interview questions about threads in Java with example answers:
- What is a thread in Java?
Answer: A thread is a lightweight unit of execution within a Java process that allows for concurrent execution of multiple tasks.
2. What is the difference between a thread and a process?
Answer: A process is a separate instance of a running program, while a thread is a separate execution path within a single process. Multiple threads can run concurrently within a single process.
3. What is the difference between a daemon thread and a non-daemon thread?
Answer: A daemon thread is a thread that runs in the background and does not prevent the Java process from terminating. A non-daemon thread, on the other hand, must complete its execution before the Java process can terminate.
4. How do you create a thread in Java?
Answer: There are two ways to create a thread in Java: by extending the Thread
class or by implementing the Runnable
interface.
Example answer:
Thread thread1 = new Thread(new MyRunnable());
thread1.start();
class MyThread extends Thread {
public void run() {
// thread code here
}
}
MyThread thread2 = new MyThread();
thread2.start();
5. What is the purpose of the sleep()
method in Java?
Answer: The sleep()
method is used to pause the execution of a thread for a specified period of time. This is useful for creating delays or for waiting for a resource to become available.
6. What is the purpose of the wait()
and notify()
methods in Java?
Answer: The wait()
and notify()
methods are used for inter-thread communication. wait()
is used to pause a thread until a condition is met, while notify()
is used to wake up a waiting thread when a condition becomes true.
7. What is a deadlock in Java?
Answer: A deadlock occurs when two or more threads are blocked and waiting for each other to release a resource that they need to continue executing. This can result in a deadlock, where neither thread can proceed and the program appears to be stuck.
Example answer:
// thread 1
synchronized (resource1) {
synchronized (resource2) {
// code that uses both resources
}
}
// thread 2
synchronized (resource2) {
synchronized (resource1) {
// code that uses both resources
}
}
In this example, both threads acquire one resource and then try to acquire the other, resulting in a deadlock if they both execute concurrently.
These are just a few examples of common interview questions about threads in Java. It’s important to have a solid understanding of the basics of threads, including how to create and manage them, as well as how to handle common issues such as synchronization and deadlock.
- Apache Tomcat interview Questions with Answers
- Top 10 Core Java Interview Question Answer
- 25 Java Interview Questions and Answer
- Spring Boot interview Questions with Answers [Top10 ]
- JSP interview Questions and Answers for Freshers[10]
- How to Connect Mysql Database in Java using Spring Boot
- Spring boot tricky interview questions [10]
- Difference Between JSP and Servlets
- Microservices interview questions with Answers
Thread Synchronization in java
Thread synchronization is the process of controlling access to shared resources or data in a multi-threaded environment. In Java, synchronization is achieved using the synchronized
keyword.
There are two ways to use synchronized
in Java:
- Synchronized method: A synchronized method is a method that is marked with the
synchronized
keyword. When a thread calls a synchronized method, it acquires the lock on the object the method is called on. Other threads that attempt to call the same synchronized method will be blocked until the lock is released.
Example:
public synchronized void doSomething() {
// synchronized code here
}
In this example, the doSomething()
method is marked as synchronized. When a thread calls this method, it acquires the lock on the object that the method was called on.
- Synchronized block: A synchronized block is a block of code that is wrapped in a
synchronized
statement. When a thread enters a synchronized block, it acquires the lock on the object specified in thesynchronized
statement. Other threads that attempt to enter the same synchronized block will be blocked until the lock is released.
Example:
public void doSomething() {
synchronized (this) {
// synchronized code here
}
}
In this example, the doSomething()
method contains a synchronized block that is wrapped in a synchronized
statement. When a thread enters the synchronized block, it acquires the lock on the this
object.
It’s important to note that synchronization can result in performance issues, especially if multiple threads are contending for the same lock. It’s also possible to create a deadlock if multiple threads are waiting for each other to release locks. Therefore, it’s important to use synchronization judiciously and carefully.
In summary, thread synchronization in Java is achieved using the synchronized
keyword, which can be used to mark methods or blocks of code that require exclusive access to shared resources or data.
Types of thread pool in java
In Java, there are three types of thread pools available in the java.util.concurrent
package:
- FixedThreadPool: A
FixedThreadPool
consists of a fixed number of threads that are created when the pool is created. These threads will remain active until the pool is shut down.
Example:
ExecutorService executor = Executors.newFixedThreadPool(5);
In this example, a FixedThreadPool
is created with 5 threads.
- CachedThreadPool: A
CachedThreadPool
will create new threads as needed, and terminate idle threads when they are no longer needed. This can be useful when the number of tasks is unpredictable.
Example:
ExecutorService executor = Executors.newCachedThreadPool();
In this example, a CachedThreadPool
is created.
- ScheduledThreadPool: A
ScheduledThreadPool
is used when you need to schedule tasks to run at specified intervals, or after a delay.
Example:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
In this example, a ScheduledThreadPool
is created with 3 threads.
All three types of thread pools use a work queue to store tasks that are waiting to be executed. If the work queue is full, new tasks will be rejected until a thread becomes available.
Thread pools are useful for managing the execution of multiple tasks in a multi-threaded environment. By using a thread pool, you can avoid the overhead of creating and destroying threads for each task, and improve the overall performance of your application.
Join Telegram | Join Now |
Home Page | Full Stack With Java |