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

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

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

一、題目描述

題目:

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

同步鎖的幾種方式

synchronized

1、同步代碼塊

2、同步方法

jdk1.5后

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

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

二、解題思路

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

新創(chuàng)建類:LockDemo1

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

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

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

使用lock鎖:

新創(chuàng)建類:LockDemo2

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

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

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

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

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

三、代碼詳解

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號(hào)窗口").start();
        new Thread(ticket, "2號(hào)窗口").start();
        new Thread(ticket, "3號(hào)窗口").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號(hào)窗口").start();
        new Thread(ticket, "2號(hào)窗口").start();
        new Thread(ticket, "3號(hào)窗口").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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

    SpringBoot 國際化配置是實(shí)現(xiàn)應(yīng)用程序支持多語言的功能,這對(duì)于全球化的網(wǎng)站和應(yīng)用來說至關(guān)重要,SpringBoot 提供了簡(jiǎn)潔的機(jī)制來實(shí)現(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é)合實(shí)例形式分析了java使用Callable接口和Future類創(chuàng)建線程的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Springboot項(xiàng)目通過redis實(shí)現(xiàn)接口的冪等性

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

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

    SpringBoot整合OpenFeign的完整指南

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

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

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

    Java實(shí)戰(zhàn)之晚會(huì)抽獎(jiǎng)系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Java語言編寫一個(gè)晚會(huì)抽獎(jiǎng)系統(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

最新評(píng)論

弥勒县| 潍坊市| 普格县| 抚顺市| 文昌市| 芦溪县| 通许县| 乌苏市| 丰原市| 芜湖县| 新干县| 长丰县| 涿州市| 响水县| 霍林郭勒市| 独山县| 昌吉市| 常山县| 隆尧县| 牟定县| 临澧县| 临沧市| 武功县| 韶山市| 仲巴县| 砚山县| 舞阳县| 醴陵市| 太谷县| 大同县| 安顺市| 贵溪市| 平罗县| 积石山| 洛浦县| 古田县| 堆龙德庆县| 南岸区| 吉木萨尔县| 澎湖县| 定远县|