Java鎖機(jī)制Lock用法示例
本文實(shí)例講述了Java鎖機(jī)制Lock用法。分享給大家供大家參考,具體如下:
package com.expgiga.JUC; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 一、用于解決多線程安全問題的方式: * 1.同步代碼塊 synchronized 隱式鎖 * 2.同步方法 synchronized 隱式鎖 * 3.同步鎖Lock (jdk1.5以后) 顯示鎖 * 注意:顯示鎖,需要通過lock()方式上鎖,必須通過unlock()方式進(jìn)行釋放鎖 */ public class TestLock { 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(); } } class Ticket implements Runnable { private int tick = 100; private Lock lock = new ReentrantLock(); @Override public void run() { while (true) { lock.lock(); try { if (tick > 0) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 完成售票,余票為 " + --tick); } } finally { lock.unlock(); } } } }
運(yùn)行結(jié)果:
1號窗口 完成售票,余票為 99
2號窗口 完成售票,余票為 98
2號窗口 完成售票,余票為 97
2號窗口 完成售票,余票為 96
2號窗口 完成售票,余票為 95
3號窗口 完成售票,余票為 94
1號窗口 完成售票,余票為 93
1號窗口 完成售票,余票為 92
1號窗口 完成售票,余票為 91
1號窗口 完成售票,余票為 90
1號窗口 完成售票,余票為 89
1號窗口 完成售票,余票為 88
1號窗口 完成售票,余票為 87
1號窗口 完成售票,余票為 86
2號窗口 完成售票,余票為 85
3號窗口 完成售票,余票為 84
1號窗口 完成售票,余票為 83
2號窗口 完成售票,余票為 82
3號窗口 完成售票,余票為 81
1號窗口 完成售票,余票為 80
1號窗口 完成售票,余票為 79
1號窗口 完成售票,余票為 78
1號窗口 完成售票,余票為 77
1號窗口 完成售票,余票為 76
1號窗口 完成售票,余票為 75
1號窗口 完成售票,余票為 74
1號窗口 完成售票,余票為 73
1號窗口 完成售票,余票為 72
2號窗口 完成售票,余票為 71
2號窗口 完成售票,余票為 70
2號窗口 完成售票,余票為 69
2號窗口 完成售票,余票為 68
3號窗口 完成售票,余票為 67
1號窗口 完成售票,余票為 66
1號窗口 完成售票,余票為 65
1號窗口 完成售票,余票為 64
1號窗口 完成售票,余票為 63
1號窗口 完成售票,余票為 62
1號窗口 完成售票,余票為 61
2號窗口 完成售票,余票為 60
2號窗口 完成售票,余票為 59
3號窗口 完成售票,余票為 58
3號窗口 完成售票,余票為 57
1號窗口 完成售票,余票為 56
1號窗口 完成售票,余票為 55
2號窗口 完成售票,余票為 54
2號窗口 完成售票,余票為 53
2號窗口 完成售票,余票為 52
3號窗口 完成售票,余票為 51
1號窗口 完成售票,余票為 50
1號窗口 完成售票,余票為 49
1號窗口 完成售票,余票為 48
1號窗口 完成售票,余票為 47
1號窗口 完成售票,余票為 46
1號窗口 完成售票,余票為 45
2號窗口 完成售票,余票為 44
3號窗口 完成售票,余票為 43
3號窗口 完成售票,余票為 42
3號窗口 完成售票,余票為 41
3號窗口 完成售票,余票為 40
3號窗口 完成售票,余票為 39
1號窗口 完成售票,余票為 38
2號窗口 完成售票,余票為 37
2號窗口 完成售票,余票為 36
2號窗口 完成售票,余票為 35
2號窗口 完成售票,余票為 34
2號窗口 完成售票,余票為 33
2號窗口 完成售票,余票為 32
2號窗口 完成售票,余票為 31
3號窗口 完成售票,余票為 30
1號窗口 完成售票,余票為 29
1號窗口 完成售票,余票為 28
1號窗口 完成售票,余票為 27
1號窗口 完成售票,余票為 26
1號窗口 完成售票,余票為 25
1號窗口 完成售票,余票為 24
1號窗口 完成售票,余票為 23
1號窗口 完成售票,余票為 22
1號窗口 完成售票,余票為 21
1號窗口 完成售票,余票為 20
1號窗口 完成售票,余票為 19
1號窗口 完成售票,余票為 18
1號窗口 完成售票,余票為 17
1號窗口 完成售票,余票為 16
1號窗口 完成售票,余票為 15
2號窗口 完成售票,余票為 14
2號窗口 完成售票,余票為 13
2號窗口 完成售票,余票為 12
3號窗口 完成售票,余票為 11
3號窗口 完成售票,余票為 10
3號窗口 完成售票,余票為 9
1號窗口 完成售票,余票為 8
1號窗口 完成售票,余票為 7
1號窗口 完成售票,余票為 6
1號窗口 完成售票,余票為 5
2號窗口 完成售票,余票為 4
3號窗口 完成售票,余票為 3
1號窗口 完成售票,余票為 2
2號窗口 完成售票,余票為 1
2號窗口 完成售票,余票為 0
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java實(shí)現(xiàn)List轉(zhuǎn)換為Map的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)List轉(zhuǎn)換為Map的一些常見的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03提升網(wǎng)絡(luò)請求穩(wěn)定性HttpClient的重試機(jī)制深入理解
這篇文章主要為大家介紹了提升網(wǎng)絡(luò)請求穩(wěn)定性HttpClient的重試機(jī)制深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Java實(shí)現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼
本文以Java代碼為例介紹如何實(shí)現(xiàn)將彩色PDF文件轉(zhuǎn)為灰度(黑白)的PDF文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-03-03java基礎(chǔ)(System.err和System.out)詳解
下面小編就為大家?guī)硪黄猨ava基礎(chǔ)(System.err和System.out)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06JAVALambda表達(dá)式與函數(shù)式接口詳解
大家好,本篇文章主要講的是JAVALambda表達(dá)式與函數(shù)式接口詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02Java超詳細(xì)講解SpringMVC如何獲取請求數(shù)據(jù)
Spring?MVC?是?Spring?提供的一個(gè)基于?MVC?設(shè)計(jì)模式的輕量級?Web?開發(fā)框架,本質(zhì)上相當(dāng)于?Servlet,Spring?MVC?角色劃分清晰,分工明細(xì),本章來講解SpringMVC如何獲取請求數(shù)據(jù)2022-04-04java實(shí)現(xiàn)微信企業(yè)付款到個(gè)人
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信企業(yè)付款到個(gè)人功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10