1.1 線程的優先級
java 中的線程優先級的范圍是1~10,默認的優先級是5。10極最高。
有時間片輪循機制。“高優先級線程”被分配CPU的概率高於“低優先級線程”。根據時間片輪循調度,所以能夠並發執行。無論是是級別相同還是不同,線程調用都不會絕對按照優先級執行,每次執行結果都不一樣,調度算法無規律可循,所以線程之間不能有先后依賴關系。
無時間片輪循機制時,高級別的線程優先執行,如果低級別的線程正在運行時,有高級別線程可運行狀態,則會執行完低級別線程,再去執行高級別線程。如果低級別線程處於等待、睡眠、阻塞狀態,或者調用yield()函數讓當前運行線程回到可運行狀態,以允許具有相同優先級或者高級別的其他線程獲得運行機會。因此,使用yield()的目的是讓相同優先級的線程之間能適當的輪轉執行。但是,實際中無法保證yield()達到讓步目的,因為讓步的線程還有可能被線程調度程序再次選中。結論:yield()從未導致線程轉到等待/睡眠/阻塞狀態。在大多數情況下,yield()將導致線程從運行狀態轉到可運行狀態,但有可能沒有效果。
優先級測試程序:
package com.first;
public class ThreadPriority
{
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()
+"("+Thread.currentThread().getPriority()+ ")");
Thread t1=new ThreadP("thread1"); // 新建t1
Thread t2=new ThreadP("thread2"); // 新建t2
t1.setPriority(5); // 設置t1的優先級為1
t2.setPriority(5); // 設置t2的優先級為10
t1.start(); // 啟動t1
t2.start(); // 啟動t2
}
}
class ThreadP extends Thread{
public ThreadP(String name) {
super(name);
}
public void run(){
for (int i=0; i<5; i++) {
System.out.println(Thread.currentThread().getName()
+"("+Thread.currentThread().getPriority()+ ")"
+", loop "+i);
}
}
}
運行結果如下:
main(5)
thread2(10), loop 0
thread1(1), loop 0
thread2(10), loop 1
thread2(10), loop 2
thread2(10), loop 3
thread2(10), loop 4
thread1(1), loop 1
thread1(1), loop 2
thread1(1), loop 3
thread1(1), loop 4
自己編了一個股票監控軟件,有如下功能,有興趣的朋友可以下載;
(1) 個股監測。監測個股實時變化,可以監測個股大單交易、急速拉升和下降、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉升點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;
(2) 大盤監測。監測大盤的走勢,采用上證、深證、創業三大指數的綜合指數作為大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。
(3) 股票推薦。還能根據歷史數據長期或短期走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增長速度從大到小排序,推薦給你漲勢良好的股票;
下載地址:
1.0.3版本(修復大盤指數崩潰缺陷)下載地址:
鏈接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h
更新鏈接:
https://www.cnblogs.com/bclshuai/p/10621613.html
