1. 程式人生 > >同步鎖與同步函式鎖的使用方法

同步鎖與同步函式鎖的使用方法

class Ticket implements Runnable
{
private int num=300;
//Object obj = new Object();
    boolean flag=true;
public void run()
{
if(flag)
while(true)
{
synchronized(this)
{
if(num>0)
{
try{Thread.sleep(10);}
catch (InterruptedException e){}
System.out.println("...obj..."+num--);
}
}    
}
else
while(true)
{
show();
}
}
public synchronized void show()
{
if(num>0)
{
try{Thread.sleep(10);}
catch (InterruptedException e){}
System.out.println("...function..."+num--);
}
}


}
class  ThreadDemo
{
public static void main(String[] args) 
{
System.out.println("Hello World!");
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try{Thread.sleep(20);}
catch (InterruptedException e){}
t.flag=false;
t2.start();
}
}

相關推薦

同步同步函式的使用方法

class Ticket implements Runnable {private int num=300;//Object obj = new Object();     boolean flag=true;public void run(){if(flag)while(

Python3之多執行緒GIL、同步、訊號量、死遞迴、執行緒Queue、Event、定時器

GIL與互斥鎖再理解 執行緒一要把python程式碼交給直譯器去執行,而此時垃圾回收執行緒和執行緒二也需要將自己的任務交給python直譯器去執行,為了防止各個執行緒之間的資料產生衝突,誰拿到GIL鎖的許可權誰才能執行自己的任務,這就避免了不同任務之間的資

redisson-分散式同步器學習

簡單使用 基本 // 1. 建立配置物件 Config = ... // 2. 建立redisson例項 RedissonClient redisson = Redisson.create(config); // 3. 獲得鎖物件 RLock l

java中同步需要注意的幾點

1.只能給方法或方法的一部分加鎖,不能給類和變數加鎖 2.不必同步類中所有的方法,類可以同時擁有同步和非同步方法 3.每一個物件只有一個鎖,需要清楚同步是加在了什麼上面--物件 4.對於一個物件中的同步方法被一個執行緒呼叫之後,其他的執行緒將無法再次呼叫這個物件的同步方法,

Linux程式設計學習筆記----多執行緒程式設計執行緒同步機制之互斥量()讀寫

互斥鎖通訊機制 基本原理 互斥鎖以排他方式防止共享資料被併發訪問,互斥鎖是一個二元變數,狀態為開(0)和關(1),將某個共享資源與某個互斥鎖邏輯上繫結之後,對該資源的訪問操作如下: (1)在訪問該資源之前需要首先申請互斥鎖,如果鎖處於開狀態,則申請得到鎖並立即上鎖(關),防

11.python並發入門(part4 死遞歸

python lock 線程 互斥鎖 rlock 一、關於死鎖。死鎖,就是當多個進程或者線程在執行的過程中,因爭奪共享資源而造成的一種互相等待的現象,一旦產生了死鎖,不加人工處理,程序會一直等待下去,這也被稱為死鎖進程。下面是一個產生“死鎖”現象的例子:import threadingim

python並發編程之多線程2------------死遞歸,信號量等

線程的狀態 == 利用 def 就會 req f11 例如 事件 一、死鎖現象與遞歸鎖 進程也是有死鎖的 所謂死鎖: 是指兩個或兩個以上的進程或線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用, 它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死

公平非公平

bstr gets ado tex input ret trac 對象鎖 ctrl 前言 最近開始讀JDK源碼,所有心得準備總結成一個專欄,JDK Analysis系列的第一篇,就從萬眾矚目的ReentrantLock開始吧,而談到ReentrantLock,就不得不說AQ

公平非公平源碼對比

exc 方式 native 非公平鎖 false 隊列 其它 釋放 null 語義: 1.公平鎖:每個線程在獲取鎖的時候,會先檢查該鎖維護的等待隊列,如果該隊列是空或者當前線程是第一個,則占有鎖,否則按照FIFO的原則,進入等待隊列,等待獲取鎖; 2.非公平鎖:當前線程在獲

Java之重入(Reentrantlock)原理,公平非公平

一個 star spa void 模板 ont thread fin 模式 1、特點: 已獲取鎖的線程再次請求鎖,可以直接獲取。 2、實現: 自定義內部類 Sync,繼承 AbstarctQueuedSynchronizer : 2.1、獲取鎖:lock() a、公平鎖:

並發編程 - 線程 - 1.互斥/2.GIL解釋器/3.死遞歸/4.信號量/5.Event事件/6.定時器

級別 src 總結 alex post strip CQ bsp 回收機制 1.互斥鎖: 原理:將並行變成串行 精髓:局部串行,只針對共享數據修改 保護不同的數據就應該用不用的鎖 1 from threading import Thread

遞歸

for lose -a int time chang 連續 bsp tar 死鎖導致程序卡死,互斥鎖只能acquire一次,想acquire必須先release。 from threading import Thread,Lock import time mutexA=L

對象,重入

內置鎖 內置 style adf ktr blog 必須 .net wid 看的該文章的總結: https://juejin.im/post/5adf14dcf265da0b7b358d58 synchronized一般我們用來修飾三種東西: 修飾普通方法 修飾代

共享排它區別(轉)

等待 lte 數據 讀取 顯示 nod 部分 tps 執行 共享鎖【S鎖】又稱讀鎖,若事務T對數據對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改

ReentrantLock——公平非公平對比

/** * 公平鎖非公平鎖 */ @Test public void FairLockAndNotFairLockTest() throws Exception { ReentrantLock2 fairLock = new Reen

ReentrantLock原始碼之公平非公平

ReentrantLock類與Synchronized關鍵字的主要區別之一就是可以實現公平鎖和非公平鎖。我們看下ReentrantLock類是如果實現公平鎖與非公平鎖的。 1、非公平鎖的實現 ReentrantLock預設建構函式為非公平鎖(為什麼?因為非公平鎖的實現可以減少執行緒的切換

遞迴

程序也有死鎖與遞迴鎖,在程序那裡忘記說了,放到這裡一切說了額 所謂死鎖: 是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖 1 from

多執行緒之 ReentrantLock 的公平非公平

ReentrantLock 重入鎖的意思。重入的意思是任意執行緒再獲取到鎖後能夠再次獲取該鎖而不會被鎖阻塞。ReentrantLock 包含公平鎖和非公平鎖。 ReetrantLock 的建構函式中根據boolean值的不同  FairSync 公平同步器與非公平同步器 上

大白話聊聊Java併發面試問題之公平非公平是啥?【石杉的架構筆記】

歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! 一、寫在前面 上篇文章(大白話聊聊Java併發面試問題之談談你對AQS的理解?)聊了一下java併發包中的AQS的工作原理,也間接說明了ReentrantLock的工作原理。 這篇文章接著來聊一個話

java中ReentrantLock的公平非公平

大家都知道ReentrantLock是基於jdk層面實現的可重入鎖,使用的時候有公平鎖與非公平鎖之分,預設採用非公平鎖。那麼公平鎖與非公平鎖的機制有何區別呢?非公平鎖的機制為什麼會提高效能呢?       在這裡不討論兩種鎖的具體實現,只講其思想。        1、首先