導航:首頁 > 編程語言 > java線程設置優先順序

java線程設置優先順序

發布時間:2023-03-21 01:22:22

java多線程的優先順序

優先順序線程的優先順序(Priority)告訴調試程序該線程的重要程度有多大 如果有大量線程都被堵塞 都在等候運行 調試程序會首先運行具有最高優先順序的那個線程 然而 這並不表示優先順序較低的線程不會運行(換言之 不會因為存在優先順序而導致死鎖) 若線程的優先順序較低 只不過表示它被准許運行的機會小一些而已 可用getPriority()方法讀取一個線程的優先順序 並用setPriority()改變它 在下面這個程序片中 大家會發現計數器的計數速度慢了下來 因為它們關聯的線程分配了較低的優先順序 //: Counter java// Adjusting the priorities of threadsimport java awt *;import java awt event *;import java applet *;class Ticker extends Thread { private Button b = new Button( Toggle ) incPriority = new Button( up ) decPriority = new Button( down ); private TextField t = new TextField( ) pr = new TextField( ); // Display priority private int count = ; private boolean runFlag = true; public Ticker (Container c) { b addActionListener(new ToggleL()); incPriority addActionListener(new UpL()); decPriority addActionListener(new DownL()); Panel p = new Panel(); p add(t); p add(pr); p add(b); p add(incPriority); p add(decPriority); c add(p); } class ToggleL implements ActionListener { public void actionPerformed(ActionEvent e) { runFlag = !runFlag; } } class UpL implements ActionListener { public void actionPerformed(ActionEvent e) { int newPriority = getPriority() + ; if(newPriority > Thread MAX_PRIORITY) newPriority = Thread MAX_PRIORITY; setPriority(newPriority); } } class DownL implements ActionListener { public void actionPerformed(ActionEvent e) { int newPriority = getPriority() ; if(newPriority < Thread MIN_PRIORITY) newPriority = Thread MIN_PRIORITY; setPriority(newPriority); } } public void run() { while (true) { if(runFlag) { t setText(Integer toString(count++)); pr setText( Integer toString(getPriority())); } yield(); } }}public class Counter extends Applet { private Button start = new Button( Start ) upMax = new Button( Inc Max Priority ) downMax = new Button( Dec Max Priority ); private boolean started = false; private static final int SIZE = ; private Ticker [] s = new Ticker [SIZE]; private TextField mp = new TextField( ); public void init() { for(int i = ; i < s.length; i++) s[i] = new Ticker2(this); add(new Label("MAX_PRIORITY = " + Thread.MAX_PRIORITY)); add(new Label("MIN_PRIORITY = " + Thread.MIN_PRIORITY)); add(new Label("Group Max Priority = ")); add(mp); add(start); add(upMax); add(downMax); start.addActionListener(new StartL()); upMax.addActionListener(new UpMaxL()); downMax.addActionListener(new DownMaxL()); showMaxPriority(); // Recursively display parent thread groups: ThreadGroup parent = s[0].getThreadGroup().getParent(); while(parent != null) { add(new Label( "Parent threadgroup max priority = " + parent.getMaxPriority())); parent = parent.getParent(); } } public void showMaxPriority() { mp.setText(Integer.toString( s[0].getThreadGroup().getMaxPriority())); } class StartL implements ActionListener { public void actionPerformed(ActionEvent e) { if(!started) { started = true; for(int i = 0; i < s.length; i++) s[i].start(); } } } class UpMaxL implements ActionListener { public void actionPerformed(ActionEvent e) { int maxp = s[0].getThreadGroup().getMaxPriority(); if(++maxp > Thread.MAX_PRIORITY) maxp = Thread.MAX_PRIORITY; s[0].getThreadGroup().setMaxPriority(maxp); showMaxPriority(); } } class DownMaxL implements ActionListener { public void actionPerformed(ActionEvent e) { int maxp = s[0].getThreadGroup().getMaxPriority(); if(--maxp < Thread.MIN_PRIORITY) maxp = Thread.MIN_PRIORITY; s[0].getThreadGroup().setMaxPriority(maxp); showMaxPriority(); } } public static void main(String[] args) { Counter5 applet = new Counter5(); Frame aFrame = new Frame("Counter5"); aFrame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); aFrame.add(applet, BorderLayout.CENTER); aFrame.setSize(300, 600); applet.init(); applet.start(); aFrame.setVisible(true); }} ///:~Ticker採用本章前面構造好的形式,但有一個額外的TextField(文本欄位),用於顯示線程的優先順序;以及兩個額外的按鈕,用於人為提高及降低優先順序。WInGWit.也要注意yield()的用法,它將控制權自動返回給調試程序(機制)。若不進行這樣的處理,多線程機制仍會工作,但我們會發現它的運行速度慢了下來(試試刪去對yield()的調用)。亦可調用sleep(),但假若那樣做,計數頻率就會改由sleep()的持續時間控制,而不是優先順序。Counter5中的init()創建了由10個Ticker2構成的一個數組;它們的按鈕以及輸入欄位(文本欄位)由Ticker2構建器置入窗體。Counter5增加了新的按鈕,用於啟動一切,以及用於提高和降低線程組的最大優先順序。除此以外,還有一些標簽用於顯示一個線程可以採用的最大及最小優先順序;以及一個特殊的文本欄位,用於顯示線程組的最大優先順序(在下一節里,我們將全面討論線程組的問題)。最後,父線程組的優先順序也作為標簽顯示出來。按下「up」(上)或「down」(下)按鈕的時候,會先取得Ticker2當前的優先順序,然後相應地提高或者降低。運行該程序時,我們可注意到幾件事情。首先,線程組的默認優先順序是5。即使在啟動線程之前(或者在創建線程之前,這要求對代碼進行適當的修改)將最大優先順序降到5以下,每個線程都會有一個5的默認優先順序。最簡單的測試是獲取一個計數器,將它的優先順序降低至1,此時應觀察到它的計數頻率顯著放慢。現在試著再次提高優先順序,可以升高回線程組的優先順序,但不能再高了。現在將線程組的優先順序降低兩次。線程的優先順序不會改變,但假若試圖提高或者降低它,就會發現這個優先順序自動變成線程組的優先順序。此外,新線程仍然具有一個默認優先順序,即使它比組的優先順序還要高(換句話說,不要指望利用組優先順序來防止新線程擁有比現有的更高的優先順序)。最後,試著提高組的最大優先順序。可以發現,這樣做是沒有效果的。我們只能減少線程組的最大優先順序,而不能增大它。 lishixin/Article/program/Java/gj/201311/27587

❷ java 線程 優先順序設置 setPriority() 的參數

運算符優先順序,你需要加一個括弧試試,
System.out.println("Thread.NORM_PRIORITY==10 "+(Thread.NORM_PRIORITY==5));

❸ java 裡面,主線程的優先順序可以設置嗎

Thread類的setPriority(int level)方法設置線程的優先亂虛級。優先順序別從穗埋1到10,1是最不重要的,10是最重要嘩族燃的。不設置優先順序將是默認值5.

❹ Java線程優先順序問題,為什麼我設置了t1的優先順序為8,運行結果卻是t2優先

這個優先順序設置只能提高該線程的優先概率,不能讓一個線程執行完才執行下一個。

❺ java 多線程設置線程優先順序的方法

java高手:多線程運行設置優先順序,我的電腦是雙核的,不能正常顯示結果。 線程的優先順序代表該線程的重要程度,當有多個線程同時處於可執行狀態並等待

❻ java怎麼設置線程優先順序

單獨的java,自身設置意義不大,由系統調節就好
Thread.currentThread()
然後可以 調節優先順序
voidsetPriority(int newPriority)
Changes the priority of this thread.

❼ java線程中的優先順序問題

樓主請記住一點,多線程的執行本身就是多個線程的交換執行,並非同時執行,執行的優先順序只是他執行的概率。
例如原本優先順序一樣,那麼兩個線程的執行的概率都為50%。現在我們提高其中一個,那麼一個為60%的概率搶到進入CPU執行的機會,另一個是依舊是40%。執行完一次之後又要重新搶佔CPU。但是40%概率進入的線程也有可能搶到,雖然概率低了點,但總會有他執行的機會,萬一次次都抽中40%的概率呢?所以你要正確理解線程和線程之間的優先順序

❽ 關於Java線程的優先順序

Java線程的優先順序越高,就越是先執行。A最低為1,B為6,C為10。程序在執行時先看線程的優先順序,保證高優先順序的先執行,同級別優先順序的按順序執行。並且線程在調用run方法後才開始執行。
上面的程序中,雖然創建順序為ABC,但他們同時調入內存(因為java對於一個完整的程序是批處理),jvm會保證線程優先順序順序執行。

閱讀全文

與java線程設置優先順序相關的資料

熱點內容
idr單片機 瀏覽:519
機器學習貝葉斯演算法 瀏覽:254
驗鞋的app有哪個 瀏覽:395
php資料庫文件在哪裡 瀏覽:629
pythonrun模塊 瀏覽:716
高並發處理方案php 瀏覽:147
梯形迭代式演算法 瀏覽:437
ppt轉pdf破解 瀏覽:1002
如何給股票賬號加密碼 瀏覽:105
新鄭java程序員 瀏覽:912
為什麼王者榮耀安卓和蘋果玩不了 瀏覽:774
山西百信恆山伺服器雲主機 瀏覽:843
ssh連接linux伺服器 瀏覽:384
怎麼架設mu伺服器 瀏覽:700
pythonorgdownload 瀏覽:918
選股入門公式源碼小寫怎麼編寫 瀏覽:290
解壓瀏覽器哪個好 瀏覽:449
棍法PDF 瀏覽:665
電腦文件夾怎麼後退一步 瀏覽:166
單片機高速ad 瀏覽:534