JUC 八鎖現象

2021-10-05 22:43:42 字數 2161 閱讀 7854

由鎖引發的8個問題

同一物件,兩個同步方法,哪個先行?

同一物件,兩個同步方法,先被呼叫的執行前鎖住2s,哪個先行?

乙個物件,乙個同步,乙個普通方法,哪個先行?

兩個物件,分別呼叫兩個同步方法,先被呼叫的執行前鎖住2s,哪個先行?

增加兩個靜態同步方法,哪個先行?

兩個物件,分別呼叫兩個靜態同步方法,哪個先行?

乙個物件,乙個普通同步方法,乙個靜態同步方法,哪個先行?

兩個物件,乙個普通同步方法,乙個靜態同步方法,哪個先行?

phone phone =

newphone()

;new

thread((

)->).

start()

;//保證call在send之後

trycatch

(exception e)

newthread((

)->).

start()

;

1、2

class

phone

catch

(exception e)

system.out.

println

("sendsms");

}public

synchronized

void

call()

catch

(exception e)

system.out.

println

("call");

}}

3、4

class

phone2

catch

(exception e)

system.out.

println

("sendsms");

}public

synchronized

void

call()

catch

(exception e)

system.out.

println

("call");

}//這裡沒有鎖

public

void

hello()

}

普通方法沒有鎖

兩個物件普通方法用不同的鎖

5、6

//synchronized鎖的是方法呼叫者

// static 靜態方法,即鎖的是class

public

static

synchronized

void

sendsms()

catch

(exception e)

system.out.

println

("sendsms");

}public

static

synchronized

void

call()

catch

(exception e)

system.out.

println

("call");

}

靜態方法鎖的是class,所有靜態同步方法共用一把鎖

7、8

//靜態同步方法

public

static

synchronized

void

sendsms()

catch

(exception e)

system.out.

println

("sendsms");

}//普通同步方法

public

synchronized

void

call()

catch

(exception e)

system.out.

println

("call");

}

靜態跟普通同步方法用的是不同的鎖

JUC 執行緒八鎖

1,乙個物件裡面如果有多個synchronized方法,某乙個時刻內,只要乙個執行緒去呼叫其中的乙個synchronized方法了,其它的執行緒都只能等待,換句話說,某乙個時刻內,只能有唯一乙個執行緒去訪問這些synchronized方法。2,鎖的是當前物件this,被鎖定後,其它的執行緒都不能進入...

JUC 執行緒八鎖

package org.meng.juc 題目 判斷列印 one or two 1.兩個普通同步方法,兩個執行緒 標準列印,列印?one two 2.新增thread.sleep 3000 給getone 列印?3s 後列印 one two 3.新增普通方法 getthreee 列印?先列印thre...

八鎖現象(八鎖就是關於鎖的八個問題)

鎖 只會鎖兩個東西 物件 普通同步方法 class模板 靜態同步方法 package com.ji.lock8 import j a.util.concurrent.timeunit 八鎖就是關於鎖的八個問題 1.標準情況下,兩個執行緒先列印 發簡訊還是打 並不是先呼叫就先執行,是因為有鎖的存在 s...