Following up on the Kotlin Coroutines Basic Concepts post, in this article, I will leverage those concepts to address a classic concurrency problem: Race Conditions, using the Map-Reduce pattern. Although concise, this post covers two fascinating topics—Race Conditions and Map-Reduce—so make sure to read through to the end! ;))
To kick off the series on Kotlin Coroutines, I will explain the fundamental concepts in Coroutines along with practical code examples. Through this, I hope to provide you with a solid foundation in Coroutines so you can learn and apply them faster.
In the article Introduction to the Kotlin Language, I introduced Kotlin and promised to share my experience in the process of integrating Kotlin. This is one of the articles in that series.
In the post Clean Code with Exception I promised to solve the problem of making Exception slow. So this post will go deeper into what Java will do when an Exception is thrown and explain what a stack trace is… and from there will optimize the use of Exception
Continuing the series on ExceptionClean Code with Exception, in this article, I will explain try/catch in greater depth and vindicate try/catch from the myth that it inherently slows down program performance.
In the article Clean Code with Exception, I discussed how using Exception can make code cleaner. However, it was missing a complete practical example and guidance on using custom Exception to make exceptions more meaningful and informative.
When I first started learning Java, the thing that frustrated me most was Exception. Every little thing seemed to demand a try/catch block (I’ll write a more detailed post on this later) and made my code look dreadful. But after spending time understanding it, I realized that exceptions are actually quite neat in programming.
Hello everyone! In the previous post, I showed you how to create a JMH project with Gradle. In this article, I will compare the performance of different string concatenation methods in Java.
JMH stands for Java Microbenchmark Harness. JMH is a tool that makes benchmarking more accurate and straightforward. Benchmarking is extremely useful for high-performance applications, helping you choose the algorithm or library that delivers the best speed.