Java互斥鎖簡單實例
本文實例講述了Java互斥鎖。分享給大家供大家參考。具體分析如下:
互斥鎖,常常用于多個線程訪問獨占式資源,比如多個線程同時寫一個文件,雖然互斥訪問方式不夠高效,但是對于一些應(yīng)用場景卻很有意義
//沒有互斥鎖的情況(可以自己跑跑看運行結(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個線程讓結(jié)果更加容易觀測到 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個線程讓結(jié)果更加容易觀測到 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程序設(shè)計有所幫助。
- Java 中 synchronized的用法詳解(四種用法)
- 深入理解java中的synchronized關(guān)鍵字
- java多線程編程之使用Synchronized塊同步變量
- Java 多線程同步 鎖機(jī)制與synchronized深入解析
- Java中synchronized關(guān)鍵字修飾方法同步的用法詳解
- Java 同步鎖(synchronized)詳解及實例
- 深入理解java內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)
- java多線程中的volatile和synchronized用法分析
- Java關(guān)鍵字volatile和synchronized作用和區(qū)別
- 詳解Java多線程編程中互斥鎖ReentrantLock類的用法
- 詳解java中的互斥鎖信號量和多線程等待機(jī)制
- Java使用synchronized實現(xiàn)互斥鎖功能示例
相關(guān)文章
Hadoop之NameNode Federation圖文詳解
今天小編就為大家分享一篇關(guān)于Hadoop之NameNode Federation圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compar
這篇文章主要給大家介紹了關(guān)于Java中BigDecimal比較大小的3種方法,方法分別是??compareTo()、??equals()??和??compareTo()??,在Java中使用BigDecimal類來進(jìn)行精確的數(shù)值計算,需要的朋友可以參考下2023-11-11Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?
這篇文章主要介紹了Springboot?引入?Redis?并配置序列化并封裝RedisTemplate。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09NoHttpResponseException異常解決優(yōu)化HttpClient配置以避免連接問題
這篇文章主要為大家介紹了NoHttpResponseException異常解決,優(yōu)化HttpClient配置以避免連接問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10SpringBoot使用validation做參數(shù)校驗說明
這篇文章主要介紹了SpringBoot使用validation做參數(shù)校驗說明,首先通過添加hibernate-validator展開全文內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考與喜愛2022-04-04