Java鎖機制Lock用法示例
本文實例講述了Java鎖機制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()方式進行釋放鎖 */ 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(); } } } }
運行結果:
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相關內容感興趣的讀者可查看本站專題:《Java進程與線程操作技巧總結》、《Java數據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
提升網絡請求穩(wěn)定性HttpClient的重試機制深入理解
這篇文章主要為大家介紹了提升網絡請求穩(wěn)定性HttpClient的重試機制深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10java基礎(System.err和System.out)詳解
下面小編就為大家?guī)硪黄猨ava基礎(System.err和System.out)詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06