91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺析java多線程

發布時間:2020-06-29 02:46:34 來源:網絡 閱讀:1056 作者:Red_Ant_hoyl 欄目:開發技術

.一、概述:
從c開始,任何一門語言的默認執行順序都是按照一條路走到黑的方式。
但是,當我們需要同時進行多項任務的時候該怎么辦呢?這時我們可以將一個任務拆分成多個小任務同時處理(深層一點講,就是雖然我單線程也能夠做的到,但是cpu沒有最高效率的利用,時間也沒有高效的利用)。
所以:多線程解決的是并發的問題,目的是使任務執行效率更高,實現前提是“阻塞”。它們看上去時同時在執行的,但實際上只是分時間片試用cpu而已。

二、java任務:
作為一只Red_Ant,我才不關心Black_Ant搬過來的食物建筑的巢穴是怎么來的,因此java底層的多線程機制是如何執行的,這里就交給Black_Ant了。
java任務就是:實現Runnable接口類定義一個類。
那就簡單了,就是說平常寫的功能、方法、變量只要實現Runnable接口,把該任務實現的代碼寫到run方法中或者run方法調用就OK了。
舉例:

            package com.css.java.learning.action;
            public class Task1 implements Runnable {
                protected int countDown = 10;
                public Task1(int countDown){
                        this.countDown = countDown;
                }
                public String mhtao(){
                        return "論10斤,紅心獼猴桃可以吃幾天?";
                }
                @Override
                public void run() {
                        while(countDown-->0){
                                System.err.println(mhtao());
                                /**
                                 *  Java線程中的Thread.yield( )方法,譯為線程讓步,它能讓當前線程由“運行狀態”進入到“就緒狀態”。
                                 *  顧名思義,就是說當一個線程使用了這個方法之后,它就會把自己CPU執行的時間讓掉。
                                 *  然后,自己和其他線程一樣。依據cup的執行概率來執行自己或其他線程
                                 *  用Red_Ant的話來講就是:大家依次排隊擠公交,輪到這貨了。
                                 *  這貨沒有上車,而是講了一句話:“大家一塊兒擠啊,誰上去算誰的座位”。
                                 *  于是輪流事件就變成了概率事件,個子大,有力氣的可能概率大一點,后面的也有概率,不過小一點。
                                 */
                                Thread.yield();
                        }
                }

            }

定義了任務,此時并不涉及多線程,所以,任務本身就是一個類,它的對象我們可以在任意地方調用。

三、java線程:
java的線程是用來驅動任務執行的,也就是說你得把任務掛載到一個線程上,這樣該線程才能驅動你定義的任務來執行。
①定義:
線程Thread自身并不執行任何操作,它只是用來被多線程機制調用,并驅動賦予它的任務。
聲明線程并將任務附著到該線程上:
Thread t = new Thread(new Task1(5));
這樣,任務就附著給了線程,下面就是讓線程啟動,只需要如下的調用:
t.start();
至此,線程聲明ok。
②舉例:

            package com.css.java.learning.action;

            public class Thread1 {
                public static void main(String[] args) {
                    Thread t = new Thread(new Task1(5));
                    t.start();
                    System.err.println("線程任務已被java調用!");
                }
            }

淺析java多線程

可以看出,java調用線程之后。立馬返回到了主程序上,然后再利用java的多線程機制,進行任務執行。
為了更深入的看清,java線程的本質。
我這里在定義一個任務,掛到線程上去。

            package com.css.java.learning.action;
            public class Task2 implements Runnable {
                protected int countDown = 10;
                public String mhtao(){
                        return "答:可以吃3天!";
                }
                @Override
                public void run() {
                        while(countDown-->0){
                            System.err.println(mhtao());
                                Thread.yield();
                        }
                }
            }

線程調用:

    package com.css.java.learning.action;
    public class Thread1 {
        public static void main(String[] args) {
            Thread t = new Thread(new Task1(5));
            t.start();
            Thread t2 = new Thread(new Task2());
            t2.start();
            System.err.println("線程任務已被java調用!");
        }
    }

隨機性
運行結果一:

淺析java多線程

運行結果二:

淺析java多線程

好了,運行結果都在這了。筆者就不多說了。

四、java多線程管家:
這里,筆者科普一下Executor線程池框架!
我們通過上述方法,創建的線程。雖然稱之為線程,但他是沒人管的野線程。
調用new Thread()創建的線程缺乏管理,而且可以無限制創建,之間相互競爭,會導致過多占用系統資源導致系統癱瘓。 不利于擴展,比如如定時執行、定期執行、線程中斷。

我們,得找東西管管它啊。Executor線程管家來嘍。
重用存在的線程,減少對象創建、消亡的開銷,性能佳
可有效控制最大并發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞
提供定時執行、定期執行、單線程、并發數控制等功能。

其內部使用了線程池機制,它在java.util.cocurrent 包下,通過該框架來控制線程的啟動、執行和關閉,可以簡化并發編程的操作。因此,在Java 5之后,通過Executor來啟動線程比使用Thread的start方法更好,除了更易管理,效率更好(用線程池實現,節約開銷)外,還有關鍵的一點:有助于避免this逃逸問題——如果我們在構造器中啟動一個線程,因為另一個任務可能會在構造器結束之前開始執行,此時可能會訪問到初始化了一半的對象用Executor在構造器中。
Executor框架包括:線程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。

我們將在下一篇文章,講述java多線程管家:Executor!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五指山市| 南安市| 潮安县| 闻喜县| 巢湖市| 苍山县| 江阴市| 海原县| 佛坪县| 红原县| 桦川县| 景洪市| 鲁甸县| 涡阳县| 金平| 五河县| 新绛县| 奉化市| 黔西县| 高碑店市| 葫芦岛市| 垫江县| 化州市| 那坡县| 隆回县| 广东省| 嘉兴市| 枣庄市| 富裕县| 正定县| 西宁市| 沅陵县| 金乡县| 莱芜市| 肃宁县| 正安县| 苏尼特左旗| 临城县| 绥宁县| 搜索| 遂昌县|