java執行緒相關問題1

2021-07-27 15:14:46 字數 1942 閱讀 7025

一.thread.sleep();

1.thread.sleep(xxxx)函式就是幹這種事的,他告訴作業系統「在未來的多少毫秒內我不參與cpu競爭」。

2.而thread.sleep(0)的作用,就是「觸發作業系統立刻重新進行一次cpu競爭」。

競爭 的結果也許是當前執行緒仍然獲得cpu控制權,也許會換成別的執行緒獲得cpu控制權。這也是我們在大迴圈裡面經

常 會寫一句thread.sleep(0) ,因為這樣就給了其他執行緒比如paint執行緒獲得cpu控制權的權力,這樣介面就不會假死在那裡。

二,synchronized 的注意點

例子1、

package line;

public class lineproject implements runnable catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+":tickets"+--num);}}

public void run()

}public static void main(string args)

}執行結果

thread-0:tickets9

thread-0:tickets8

thread-0:tickets7

thread-0:tickets6

thread-0:tickets5

thread-0:tickets4

thread-2:tickets3

thread-2:tickets2

thread-2:tickets1

thread-2:tickets0

結論1:synthronized修飾方法

例子2:

package line;

public class linequicker implements runnable

@override

public void run() catch (interruptedexception e)

synchronized(this)

else}}

}}執行結果:thread-1正在賣第:0張票

thread-2正在賣第:1張票

thread-1正在賣第:2張票

thread-0正在賣第:3張票

thread-2正在賣第:4張票

thread-1正在賣第:5張票

thread-1正在賣第:6張票

thread-2正在賣第:7張票

thread-0正在賣第:8張票

thread-1正在賣第:9張票

總結:synchonized(this){}:在同一時間對於{}內的**,只有乙個執行緒處於執行狀態

當乙個執行緒訪問物件的乙個synchononized(this)同步**時,另乙個執行緒可以訪問該object的其他非synchronized(this)同步**塊

當乙個執行緒訪問object的乙個synchronized(this)同步**塊時,其他執行緒對該object的所有其他synchronized(this)同步**塊訪問也被阻塞。

例子3:

package line;

public class linemore implements runnable

public synchronized void m2()

catch (interruptedexception e)

system.out.println("b="+b);

}public  void m1()

public static void main(string args) catch (interruptedexception e)

m.m1();}}

執行結果:1000

b=1000

結論:乙個鎖住的方法,別的物件或執行緒可以讀取裡面的或在裡面修改的值

Java執行緒相關

今天主要是了解了一些執行緒的相關執行狀態,其中執行緒的同步是個比較讓人困惑的地方。我們知道執行緒的同步有兩種方法,一是用 synchronized 修飾方法 二是使用 synchronized object 同步塊 這裡涉及到乙個監視器物件。因為二者同步的首要條件就是處於同一監視器物件下才能實現同步...

Java 執行緒問題

1 生產者消費者問題 wait 必須在synchronized 函式或者 塊裡面 wait 會讓已經獲得synchronized 函式或者 塊控制權的thread暫時休息,並且喪失控制權 這個時候,由於該執行緒喪失控制權並且進入等待,其他執行緒就能取得控制權,並且在適當情況下呼叫notifyall ...

關於java 執行緒池相關

public class test threadpooltaskexecutor executor new threadpooltaskexecutor 配置核心執行緒數 executor.setcorepoolsize corecount 配置最大執行緒數 executor.setmaxpools...