最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程之同步鎖-lock詳解

 更新時間:2022年10月08日 11:13:38   作者:小虛竹and掘金  
這篇文章主要為大家詳細(xì)介紹了Java多線程中同步鎖-lock的原理與使用,文中的示例代碼講解詳細(xì),對我們了解線程有一定幫助,需要的可以參考一下

一、題目描述

題目:

同步鎖出現(xiàn)的目的就是為了解決多線程安全問題。

同步鎖的幾種方式

synchronized

1、同步代碼塊

2、同步方法

jdk1.5后

3、lock鎖:用lock()上鎖,unlock()釋放鎖

實現(xiàn):重現(xiàn)窗口售票多線程問題,并用lock鎖解決。

二、解題思路

重現(xiàn)窗口售票多線程問題:

新創(chuàng)建類:LockDemo1

在main方法中,新創(chuàng)建三個線程,一起啟動這三個線程。

新創(chuàng)建內(nèi)部類:Ticket , Ticket implements Runnable

Ticket中每0.2秒賣一張票,用--i

使用lock鎖:

新創(chuàng)建類:LockDemo2

在main方法中,新創(chuàng)建三個線程,一起啟動這三個線程。

新創(chuàng)建內(nèi)部類:Ticket , Ticket implements Runnable

在這段邏輯之前上鎖,邏輯結(jié)束后釋放鎖 要把釋放鎖放在finally里

Ticket中每0.2秒賣一張票,用--i

lock鎖相比于synchronized的好處是 靈活 ,可由研發(fā)人員自行控制加鎖和解鎖的時機。

三、代碼詳解

LockDemo1

/**
 * Description: 重現(xiàn)窗口售票多線程問題
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改后版本	        修改人		修改日期			修改內(nèi)容
 * 2022/5/15.1	    xiaoxuzhu		2022/5/15		    Create
 * </pre>
 * @date 2022/5/15
 */
public class LockDemo1 {

    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(ticket, "1號窗口").start();
        new Thread(ticket, "2號窗口").start();
        new Thread(ticket, "3號窗口").start();
    }

    static class Ticket implements Runnable {

        private int tick = 100;

        @Override
        public void run() {

            while (true) {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (tick > 0) {
                    System.out.println(Thread.currentThread().getName() + "完成售票,余票是:" + --tick);
                }
            }
        }
    }
}

出現(xiàn)多線程問題:

LockDemo2

public class LockDemo2 {

    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(ticket, "1號窗口").start();
        new Thread(ticket, "2號窗口").start();
        new Thread(ticket, "3號窗口").start();
    }

    static class Ticket implements Runnable {

        private int tick = 100;
        //創(chuàng)建鎖
        private Lock lock = new ReentrantLock();

        @Override
        public void run() {

            while (true) {
                //上鎖
                lock.lock();
                try {
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (tick > 0) {
                        System.out.println(Thread.currentThread().getName() + "完成售票,余票是:" + --tick);
                    }
                }finally {
                    lock.unlock();
                }
            }
        }
    }
}

到此這篇關(guān)于Java多線程之同步鎖-lock詳解的文章就介紹到這了,更多相關(guān)Java同步鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis模糊查詢、分頁和別名配置的方法

    mybatis模糊查詢、分頁和別名配置的方法

    這篇文章主要介紹了mybatis模糊查詢、分頁和別名配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點

    詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點

    很多小伙伴都不知道如何用Java創(chuàng)建文件夾,今天給大家整理了這篇文章,文中有非常詳細(xì)的方法介紹及方法的優(yōu)缺點,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot實現(xiàn)國際化(多語言)配置的詳細(xì)步驟

    SpringBoot實現(xiàn)國際化(多語言)配置的詳細(xì)步驟

    SpringBoot 國際化配置是實現(xiàn)應(yīng)用程序支持多語言的功能,這對于全球化的網(wǎng)站和應(yīng)用來說至關(guān)重要,SpringBoot 提供了簡潔的機制來實現(xiàn)這一目標(biāo),本文通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • java DelayQueue的原理淺析

    java DelayQueue的原理淺析

    在本篇文章里小編給大家整理的是一篇關(guān)于java DelayQueue的原理淺析,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-01-01
  • Java使用Callable和Future創(chuàng)建線程操作示例

    Java使用Callable和Future創(chuàng)建線程操作示例

    這篇文章主要介紹了Java使用Callable和Future創(chuàng)建線程操作,結(jié)合實例形式分析了java使用Callable接口和Future類創(chuàng)建線程的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-09-09
  • Springboot項目通過redis實現(xiàn)接口的冪等性

    Springboot項目通過redis實現(xiàn)接口的冪等性

    這篇文章主要為大家介紹了Springboot項目通過redis實現(xiàn)接口的冪等性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • SpringBoot整合OpenFeign的完整指南

    SpringBoot整合OpenFeign的完整指南

    OpenFeign 是由 Netflix 開發(fā)的一個聲明式 Web 服務(wù)客戶端,它使得編寫 HTTP 客戶端變得更加簡單,本文為大家介紹了SpringBoot整合OpenFeign的詳細(xì)步驟,需要的小伙伴可以參考下
    2025-04-04
  • Java 8 開發(fā)的 Mybatis 注解代碼生成工具

    Java 8 開發(fā)的 Mybatis 注解代碼生成工具

    MybatisAnnotationTools 是基于 Java8 開發(fā)的一款可以用于自動化生成 MyBatis 注解類的工具,支持配置數(shù)據(jù)源、類路徑,表名去前綴、指定類名前后綴等功能.這篇文章主要介紹了Java 8 開發(fā)的 Mybatis 注解代碼生成工具 ,需要的朋友可以參考下
    2019-07-07
  • Java實戰(zhàn)之晚會抽獎系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之晚會抽獎系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java語言編寫一個晚會抽獎系統(tǒng),文中采用到的技術(shù)有Jdbc、Servlert、JavaScript、JQuery、Ajax等,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • java圖片格式轉(zhuǎn)換的三段代碼

    java圖片格式轉(zhuǎn)換的三段代碼

    這篇文章主要分享了java圖片格式轉(zhuǎn)換的三段代碼,小編查找資料整理了java圖片格式轉(zhuǎn)換的三段不同代碼,推薦給大家。
    2015-11-11

最新評論

福海县| 民丰县| 天峻县| 衡阳县| 宜州市| 固安县| 游戏| 双流县| 彝良县| 江都市| 巴林右旗| 晋州市| 安福县| 盐池县| 简阳市| 揭东县| 师宗县| 香格里拉县| 河东区| 山阴县| 进贤县| 衡水市| 建始县| 斗六市| 磐石市| 汤原县| 嵊州市| 甘南县| 章丘市| 通榆县| 类乌齐县| 涞源县| 呼和浩特市| 千阳县| 甘泉县| 江门市| 梅州市| 普兰店市| 利川市| 汉源县| 广饶县|