Java互斥鎖簡單實(shí)例
本文實(shí)例講述了Java互斥鎖。分享給大家供大家參考。具體分析如下:
互斥鎖,常常用于多個(gè)線程訪問獨(dú)占式資源,比如多個(gè)線程同時(shí)寫一個(gè)文件,雖然互斥訪問方式不夠高效,但是對于一些應(yīng)用場景卻很有意義
//沒有互斥鎖的情況(可以自己跑跑看運(yùn)行結(jié)果):
public class LockDemo {
// private static Object lock = new Object();
// static確保只有一把鎖
private int i = 0;
public void increaseI() {
// synchronized (lock) {
for(int k=0;k<10;k++) { // 對i執(zhí)行10次增1操作
i++;
}
System.out.println(Thread.currentThread().getName() + "線程,i現(xiàn)在的值:" + i);
// }
}
public static void main(String[] args) {
LockDemo ld = new LockDemo();
int threadNum = 1000;
// 選擇1000個(gè)線程讓結(jié)果更加容易觀測到
MyThread[] threads = new MyThread[threadNum];
for(int i=0;i<threads.length;i++) {
threads[i] = new MyThread(ld);
// 所有線程共用一個(gè)LockDemo對象
threads[i].start();
}
}
}
class MyThread extends Thread {
LockDemo ld;
public MyThread(LockDemo ld) {
this.ld = ld;
}
public void run() {
ld.increaseI();
}
}
//加上互斥鎖以后:
public class LockDemo {
private static Object lock = new Object();
// static確保只有一把鎖
private int i = 0;
public void increaseI() {
synchronized (lock) {
for(int k=0;k<10;k++) {
// 對i執(zhí)行10次增1操作
i++;
}
System.out.println(Thread.currentThread().getName() + "線程,i現(xiàn)在的值:" + i);
}
}
public static void main(String[] args) {
LockDemo ld = new LockDemo();
int threadNum = 1000;
// 選擇1000個(gè)線程讓結(jié)果更加容易觀測到
MyThread[] threads = new MyThread[threadNum];
for(int i=0;i<threads.length;i++) {
threads[i] = new MyThread(ld);
// 所有線程共用一個(gè)LockDemo對象
threads[i].start();
}
}
}
class MyThread extends Thread {
LockDemo ld;
public MyThread(LockDemo ld) {
this.ld = ld;
}
public void run() {
ld.increaseI();
}
}
希望本文所述對大家的java程序設(shè)計(jì)有所幫助。
- Java 中 synchronized的用法詳解(四種用法)
- 深入理解java中的synchronized關(guān)鍵字
- java多線程編程之使用Synchronized塊同步變量
- Java 多線程同步 鎖機(jī)制與synchronized深入解析
- Java中synchronized關(guān)鍵字修飾方法同步的用法詳解
- Java 同步鎖(synchronized)詳解及實(shí)例
- 深入理解java內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)
- java多線程中的volatile和synchronized用法分析
- Java關(guān)鍵字volatile和synchronized作用和區(qū)別
- 詳解Java多線程編程中互斥鎖ReentrantLock類的用法
- 詳解java中的互斥鎖信號量和多線程等待機(jī)制
- Java使用synchronized實(shí)現(xiàn)互斥鎖功能示例
相關(guān)文章
Springboot使用test無法啟動(dòng)問題的解決
這篇文章主要介紹了Springboot使用test無法啟動(dòng)問題的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
springboot DTO字符字段與日期字段的轉(zhuǎn)換問題
這篇文章主要介紹了springboot DTO字符字段與日期字段的轉(zhuǎn)換問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot項(xiàng)目的測試類實(shí)例解析
這篇文章主要介紹了SpringBoot項(xiàng)目的測試類實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
spring 或者spring boot 調(diào)整bean加載順序的方式
這篇文章主要介紹了spring 或者spring boot 調(diào)整bean加載順序的方式,本文通過實(shí)例代碼講解三種調(diào)整類加載順序的方式,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題
這篇文章主要介紹了解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
關(guān)于java.lang.NumberFormatException: null的問題及解決
這篇文章主要介紹了關(guān)于java.lang.NumberFormatException: null的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringBoot使用Validation包進(jìn)行輸入?yún)?shù)校驗(yàn)
Spring Boot 自帶的 spring-boot-starter-validation 包支持以標(biāo)準(zhǔn)注解的方式進(jìn)行輸入?yún)?shù)校驗(yàn),本文即關(guān)注 spring-boot-starter-validation 包所涵蓋的標(biāo)準(zhǔn)注解的使用、校驗(yàn)異常的捕獲與展示、分組校驗(yàn)功能的使用,以及自定義校驗(yàn)器的使用,需要的朋友可以參考下2024-05-05
Java中的HashMap和Hashtable區(qū)別解析
這篇文章主要介紹了Java中的HashMap和Hashtable區(qū)別解析,HashMap和Hashtable都實(shí)現(xiàn)了Map接口,但決定用哪一個(gè)之前先要弄清楚它們之間的區(qū)別,主要的區(qū)別有線程安全性、同步和速度,需要的朋友可以參考下2023-11-11

