Synchronized block
Declaring variables are not the only tool to ensure the consistency between threads. There are other tools in the Java language and one of them is the synchronized block. The synchronized keyword is part of the language and it can be used in front of a method or a program block inside a method.
Every object in the Java program has a monitor that can be locked and unlocked by any running thread. When a thread locks a monitor, it is said that that thread holds the lock, and no two threads can hold the lock of a monitor at a time. If a thread tries to lock a monitor that is already locked, it gets BLOCKED until the monitor is released. A synchronized block starts with the synchronized keyword, and then an object instance specified between parentheses and the block comes. The following small program demonstrates the synchronized block:
public class SynchronizedDemo implements Runnable {
public static final int N = 1000;
public static final int MAX_TRY = 1_000_000...