Java concurrency vs multithreading example

Jasmine 181 Published: 09/24/2024

Java concurrency vs multithreading example

Here's an example of how to use Java concurrency and multithreading for a task:

Imagine we have a simple application that needs to perform multiple tasks simultaneously, such as calculating the sum of numbers, counting the number of characters in a string, and finding the maximum value from an array. To achieve this efficiently without blocking the main thread, we can use threads to execute these tasks concurrently.

Here's the Java code:

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class ConcurrencyExample {

public static void main(String[] args) {

// Create a fixed-size executor with 3 threads.

ExecutorService executor = Executors.newFixedThreadPool(3);

// Start tasks

executor.submit(new SumTask());

executor.submit(new CharCountTask());

executor.submit(new MaxValueTask());

// Shutdown the pool to free up system resources.

executor.shutdown();

}

}

class SumTask implements Runnable {

public void run() {

long sum = 0;

for (int i = 1; i <= 100000; i++) {

sum += i;

}

System.out.println("Sum: " + sum);

}

}

class CharCountTask implements Runnable {

public void run() {

String str = new String(new char[10000]);

int count = 0;

for (char c : str.toCharArray()) {

if (!Character.isWhitespace(c)) {

count++;

}

}

System.out.println("Char count: " + count);

}

}

class MaxValueTask implements Runnable {

public void run() {

int maxValue = Integer.MIN_VALUE;

for (int i = 1; i <= 1000; i++) {

if (i > maxValue) {

maxValue = i;

}

}

System.out.println("Max value: " + maxValue);

}

}

In this example, we use the ExecutorService class to create a fixed-size pool of threads. We then submit our tasks (SumTask, CharCountTask, and MaxValueTask) as runnables to execute concurrently.

Here's what each task does:

The SumTask calculates the sum of numbers from 1 to 100,000. The CharCountTask counts the number of non-space characters in a string. The MaxValueTask finds the maximum value from an array.

When we run this code, it will execute all three tasks concurrently using our pool of threads. Each task is executed independently without blocking the main thread. This allows us to perform multiple CPU-bound operations simultaneously and take full advantage of multi-core processors.

This is a basic example of how concurrency can be achieved in Java. In more complex scenarios, we might use Callable or Future interfaces to handle asynchronous tasks with return values, or use BlockingQueues to synchronize inter-thread communication.

Is java concurrency in practice outdated reddit

I'd be happy to help you with that!

The topic of Java Concurrency in Practice being outdated is a common debate among developers and Java enthusiasts on Reddit. So, let's dive into the discussion!

The Original Post

A Redditor asked: "Is 'Java Concurrency in Practice' (Joshua Bloch) outdated?" They were wondering if this classic book by Joshua Bloch was still relevant in today's world, considering new developments in concurrent programming and Java itself.

Some Key Points

Java 8 and onwards: Many commenters pointed out that since Java 8, the language has improved significantly when it comes to concurrency. For instance, lambda expressions, method references, and parallel streams were added, making certain aspects of concurrent programming easier to handle. Executor Framework: A popular framework for handling concurrency in Java is the Executor Framework (part of the Java EE specification). This framework simplifies the process of creating and managing threads for concurrent tasks. While this book predates the Executor Framework's introduction, it still covers essential concepts like thread pools and task execution. RXJava/RxJava2: Some commenters mentioned that the rise of reactive programming (RxJava/RxJava2) has changed the way concurrency is approached in Java. Reactive programming emphasizes asynchronous programming using Observables and Subscriber patterns. While this book doesn't focus on reactive programming, it provides a solid foundation for understanding concurrency in general.

The Book's Strengths

Despite being an older resource, many commenters praised 'Java Concurrency in Practice' for its:

Comprehensive coverage: The book covers various aspects of concurrency, from basic threading concepts to more advanced topics like atomic variables and lock-free programming. Real-world examples: The author provides practical examples that demonstrate the concepts and help developers understand how to apply them in their own projects.

In Conclusion

While some may argue that Java Concurrency in Practice is outdated, many of its core concepts remain relevant today. With the advent of new libraries and frameworks (like Executor Framework), the book's focus on fundamental concurrency concepts provides a solid foundation for understanding concurrent programming in Java.

It's not necessarily a replacement for newer resources, but it still holds value as an introduction to concurrency or as a refresher for experienced developers. Overall, the debate highlights the importance of considering both old and new knowledge when developing software.

Hope this helps!