- Collection Framework in JavaCollections Class in JavaList Interface in Java with ExamplesArrayList in JavaVector Class in JavaLinkedList in JavaQueue Interface In JavaPriorityQueue in JavaSet in JavaHashSet in JavaLinkedHashSet in JavaMap in the JavaHashMap in JavaHashtable in JavaLinkedHashMap in Java
Thread Pools in Java
Thread pools are a powerful mechanism for managing threads in Java. A thread pool is a collection of pre-initialized threads that are ready to execute tasks. The main idea behind thread pools is to reduce the overhead of creating new threads and to limit the maximum number of threads that can be active at any given time.
In Java, thread pools are implemented using the ThreadPoolExecutor
class, which is a subclass of the ExecutorService
interface. The ThreadPoolExecutor
class provides a number of methods for creating and managing a thread pool, including:
execute(Runnable task)
: Submits a new task for execution.shutdown()
: Initiates a graceful shutdown of the thread pool.awaitTermination(long timeout, TimeUnit unit)
: Blocks until all tasks have completed execution or the timeout has expired.
Here's an example of using a thread pool to execute multiple tasks:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
// Create a thread pool with 5 threads
ExecutorService executor = Executors.newFixedThreadPool(5);
// Submit 10 tasks for execution
for (int i = 0; i < 10; i++) {
Runnable task = new Task(i);
executor.execute(task);
}
// Shutdown the thread pool
executor.shutdown();
while (!executor.isTerminated()) {}
System.out.println("All tasks completed");
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
public void run() {
System.out.println(
"Task " +
taskId +
" started by thread " +
Thread.currentThread().getName()
);
// Perform some work
System.out.println(
"Task " +
taskId +
" completed by thread " +
Thread.currentThread().getName()
);
}
}
}
In this example, we create a thread pool with 5 threads using the newFixedThreadPool()
method of the Executors
class. We then submit 10 tasks for execution using the execute()
method of the ExecutorService
interface. Each task is an instance of the Task
class, which simply prints a message indicating that the task has started and completed. Finally, we shutdown the thread pool using the shutdown()
method and wait for all tasks to complete using the isTerminated()
method.
Thread pools are a powerful tool for managing threads in Java, and can help to reduce the overhead of creating and managing threads in your applications. However, it is important to use them appropriately and to ensure that your tasks are well-designed and do not block or consume excessive resources.