一.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...