国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java多線程由易到難

Mertens / 1056人閱讀

摘要:線程可以驅動任務,因此你需要一種描述任務的方式,這可以由接口來提供。線程調度沒有順序的,由決定。首先會按照需要創建足夠多的線程來執行任務。這個程序將在中的所有任務完成之后盡快退出。就像是線程數量為的。

線程可以驅動任務,因此你需要一種描述任務的方式,這可以由Runnable接口來提供。要想定義任務,只需實現Runnable接口并編寫run方法,使得該任務可以執行你的命令。

    
public class LiftOff implements Runnable {

    protected int countDown = 10;
    private static int taskCount = 0;
    
    //id可以用來區分任務的多個實例
    private final int id = taskCount++;
    
    public LiftOff(){
        System.out.println("調用了無參的構造函數");  
    }
    
    public LiftOff(int countDown){
        this.countDown = countDown;
        System.out.println("調用了有參的構造函數
"+  
                 "參數內容為:"+countDown);  
    }
    
    public String status(){
        
        return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + "),";
        
    }

    @Override
    public void run() {
        
        while(countDown-- > 0){
            System.out.println(status());
            
            //使當前線程從執行狀態(運行狀態)變為可執行態(就緒狀態)。
            //cpu會從眾多的可執行態里選擇,也就是說,
            //當前也就是剛剛的那個線程還是有可能會被再次執行到的,
            //并不是說一定會執行其他線程而該線程在下一次中不會執行到了。
            Thread.yield();
        }
        
    }
    
    public static void main(String[] args) {
        LiftOff test1 = new LiftOff();
        test1.run();
        System.out.println("
");
        LiftOff test2 = new LiftOff(5);
        test2.run();
    }


}

將Runnable對象轉變為工作任務的傳統方式是把它提交給一個Thread構造器,
Thread構造器只需要一個Runnable對象。調用Thread對象的start()方法為該線程執行必需的初始化操作,
然后調用Runnable的run()方法,以便在這個新線程中啟動該任務。因為main()方法和LiftOff.run()是由不同
的線程執行的,因此程序同時運行兩個方法。

線程調度沒有順序的,由CPU決定。

接下來通過java.util.concurrent包中的執行器(Executor)將為你管理Thread對象,從而簡化了并發編程。

1:CachedThreadPool首先會按照需要創建足夠多的線程來執行任務(Task)。隨著程序執行的過程,有的線程執行完了任務,可以被重新循環使用時,才不再創建新的線程來執行任務

對shutdown()方法的調用可以防止新任務被提交給這個Executor,當前線程(即驅動main()的線程)將
繼續運行在shutdown()被調用之前提交的所有任務。這個程序將在Executor中的所有任務完成之后盡快退出。

2:FixedThreadPool模式會使用一個優先固定數目的線程來處理若干數目的任務。規定數目的線程處理所有任務,一旦有線程處理完了任務就會被用來處理新的任務(如果有的話)。

最好把3換成Runtime.getRuntime().availableProcessors(),這樣能更大程度利用你的電腦CPU處理。

3:SingleThreadExecutor就像是線程數量為1的FixedThreadPool。如果多個任務被提交給SingleThreadExecutor的話,那么這些任務會被保存在一個隊列中,并且會按照任務提交的順序,一個先執行完成再執行另外一個線程。SingleThreadExecutor模式可以保證只有一個任務會被執行。這種特點可以被用來處理共享資源的問題而不需要考慮同步的問題。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69844.html

相關文章

  • 2016年最值得學習的五大開源項目

    摘要:是學習動畫很好的項目,項目代碼量比較少,也很適合新手學習。遵循了谷歌材料設計,加入了一些以上的新特性,閱讀體驗絕不遜色于官方的。架構項目地址由谷歌工程師開發,展示的材料設計,項目代碼量大,但是結構清晰,還是很好理解的。 1.Material Animations 演示View的平移、縮放動畫,activity進入和退出動畫,界面間元素共享。是學習動畫很好的項目,項目代碼量比較少,也很適...

    RichardXG 評論0 收藏0
  • 3年軟件測試經驗突顯迷茫...不知道我這種測試人員是不是被淘汰???

    這兩天和朋友談到軟件測試的發展:這一行的變化確實蠻大,從開始最基礎的功能測試,到現在自動化、性能、安全乃至于以后可能出現的大數據測試、AI測試崗位需求逐漸增多。我也在軟件測試這行摸爬滾打了十年了,正好有朋友問我:如何快速成為互聯網時代優秀的測試工程師呢?趁著最近終于有了些閑余時間,遂總結了下自動化測試的成長線路圖和職業必備技能,希望可以幫助各位少走彎路、破繭成蝶、邁向成功。 下面我來分享下自動化測...

    fasss 評論0 收藏0

發表評論

0條評論

Mertens

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<