Java互斥鎖簡單實例
更新時間:2015年07月11日 10:10:56 作者:優(yōu)雅先生
這篇文章主要介紹了Java互斥鎖,較為詳細的分析了java互斥鎖的概念與功能,并實例描述了java互斥鎖的原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了Java互斥鎖。分享給大家供大家參考。具體分析如下:
互斥鎖,常常用于多個線程訪問獨占式資源,比如多個線程同時寫一個文件,雖然互斥訪問方式不夠高效,但是對于一些應用場景卻很有意義
//沒有互斥鎖的情況(可以自己跑跑看運行結果):
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個線程讓結果更加容易觀測到
MyThread[] threads = new MyThread[threadNum];
for(int i=0;i<threads.length;i++) {
threads[i] = new MyThread(ld);
// 所有線程共用一個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個線程讓結果更加容易觀測到
MyThread[] threads = new MyThread[threadNum];
for(int i=0;i<threads.length;i++) {
threads[i] = new MyThread(ld);
// 所有線程共用一個LockDemo對象
threads[i].start();
}
}
}
class MyThread extends Thread {
LockDemo ld;
public MyThread(LockDemo ld) {
this.ld = ld;
}
public void run() {
ld.increaseI();
}
}
希望本文所述對大家的java程序設計有所幫助。
您可能感興趣的文章:
- Java 中 synchronized的用法詳解(四種用法)
- 深入理解java中的synchronized關鍵字
- java多線程編程之使用Synchronized塊同步變量
- Java 多線程同步 鎖機制與synchronized深入解析
- Java中synchronized關鍵字修飾方法同步的用法詳解
- Java 同步鎖(synchronized)詳解及實例
- 深入理解java內置鎖(synchronized)和顯式鎖(ReentrantLock)
- java多線程中的volatile和synchronized用法分析
- Java關鍵字volatile和synchronized作用和區(qū)別
- 詳解Java多線程編程中互斥鎖ReentrantLock類的用法
- 詳解java中的互斥鎖信號量和多線程等待機制
- Java使用synchronized實現(xiàn)互斥鎖功能示例
相關文章
spring 或者spring boot 調整bean加載順序的方式
這篇文章主要介紹了spring 或者spring boot 調整bean加載順序的方式,本文通過實例代碼講解三種調整類加載順序的方式,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題
這篇文章主要介紹了解決SpringBoot application.yaml文件配置schema 無法執(zhí)行sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
關于java.lang.NumberFormatException: null的問題及解決
這篇文章主要介紹了關于java.lang.NumberFormatException: null的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringBoot使用Validation包進行輸入?yún)?shù)校驗
Spring Boot 自帶的 spring-boot-starter-validation 包支持以標準注解的方式進行輸入?yún)?shù)校驗,本文即關注 spring-boot-starter-validation 包所涵蓋的標準注解的使用、校驗異常的捕獲與展示、分組校驗功能的使用,以及自定義校驗器的使用,需要的朋友可以參考下2024-05-05
Java中的HashMap和Hashtable區(qū)別解析
這篇文章主要介紹了Java中的HashMap和Hashtable區(qū)別解析,HashMap和Hashtable都實現(xiàn)了Map接口,但決定用哪一個之前先要弄清楚它們之間的區(qū)別,主要的區(qū)別有線程安全性、同步和速度,需要的朋友可以參考下2023-11-11

