Example of mutex semaphore and multi-thread waiting mechanism in Java
This article mainly introduces mutex locks, semaphores and multi-thread waiting mechanism examples in Java programming. It briefly introduces the difference between mutex locks and semaphores. Friends who need it can learn more.
Mutex locks and semaphores are basic concepts designed for concurrent programming in the operating system. The conceptual difference between mutex locks and semaphores is that for the same resource, mutual exclusion Locks only have the concept of 0 and 1, but semaphores are more than that. In other words, the semaphore can enable the resource to be accessed by multiple threads at the same time, while the mutex can only be accessed by one thread at the same time.
The implementation of the mutex in java is ReetranLock. When accessing a synchronized resource, its The object needs to obtain this lock through the tryLock() method. If it fails, it returns false, and if it succeeds, it returns true. Determine whether to access the synchronized resource based on the returned information. Look at the following example
public class ReentranLockExample { private static int count = 0; private static ReentrantLock reentrantLock = new ReentrantLock(); static class MyThread extends Thread{ @Override public void run() { super.run(); try { while (true){ boolean result = reentrantLock.tryLock(); if (result){ System.out.println(Thread.currentThread().getName() + "get the lock success and run the syn code " + count ++); reentrantLock.unlock(); }else{ System.out.println(Thread.currentThread().getName() + "get the lock failed and run the syn code " + count); } System.out.println(Thread.currentThread().getName() + "run the asyntronized code " + count); Thread.sleep(500); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); thread1.start(); thread2.start(); } }
The semaphore is equivalent to a counter. If the thread wants to access a resource, it must first obtain the semaphore of the resource, and the semaphore internal The counter is decremented by 1. The internal counter of the semaphore is greater than 0, which means that there are resources that can be used. When the thread finishes using a resource, the semaphore of this resource must be released. One of the functions of a semaphore is to specify a thread to access a certain resource. It only needs to be initialized.
The implementation of semaphore in Java is Semaphore, which is passed in an integer during initialization to specify the maximum concurrent access to synchronization resources
public class SemaphoreExample { private static Semaphore semaphore = new Semaphore(2); private String lock = "lock"; private static int count = 0; static class MyThread extends Thread { @Override public void run() { super.run(); try { while (true) { semaphore.acquire(); Thread.sleep(500); System.out.println(Thread.currentThread().getName() + "get the lock success and run the syn code " + count++); semaphore.release(); Thread.sleep(500); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); MyThread thread3 = new MyThread(); thread1.start(); thread2.start(); thread3.start(); } }
CountDownLatch implements a waiting mechanism, such as waiting for participants to arrive before starting a conference. ConutDownLatch is a counter during initialization to specify the number to wait. In concurrent programming, the need to be solved is to wait for all threads to reach a certain point. Just start the next step, which is a bit similar to a meeting. The meeting can only start when all the participants have arrived
public class CountDownLatchExample { private static CountDownLatch mCountDownLatch = new CountDownLatch(3); static class MyThread extends Thread { int awaitTime; public MyThread(int i) { this.awaitTime = i; } @Override public void run() { super.run(); try { while (true) { Thread.sleep(awaitTime); System.out.println(Thread.currentThread().getName() + "arrived " ); mCountDownLatch.countDown(); mCountDownLatch.await(); //可以指定等待时间 System.out.println(Thread.currentThread().getName() + "start meeting " ); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ MyThread thread1 = new MyThread(500); MyThread thread2 = new MyThread(1000); MyThread thread3 = new MyThread(2000); thread1.start(); thread2.start(); thread3.start(); } }
Summary
The above is the detailed content of Example of mutex semaphore and multi-thread waiting mechanism in Java. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
