Java多線程(一)初步瞭解

來源:互聯網
上載者:User

標籤:

1:線程

         1.1:線程是什嗎?線程與進程。

                   進程:正在啟動並執行程式。windows是多進程的系統。每一個進程有自己的記憶體地區,也就是每個進程都會佔用一定的記憶體。一般開啟應用程式就會有進程的了。

                   線程:進程的一個分支,一個進程至少包含一個線程。一個進程就叫單線程。

每個線程是共用一個記憶體地區,應該就是共用它所在進程佔用的那塊記憶體吧。如果一個程式同時做多件事件,則需要多線程。結合個人理解和網上的一些解釋說下自己對多線程的理解

 1 public class SingleThreadDemo1 { 2     public static void main(String[] args) { 3         int i = 0, j=1; 4         while(i<10){ 5             System.out.print(++i+" "); 6         } 7         add(); 8         max(i, j); 9     }10     public static void add(){11         int i=0, j=0;12         for(i=0; i<10; i++,j-=i){13             System.out.println(i+j);14         }15     }16     public static boolean max(int x, int y){17         if(x>y){18             return true;19         }20         return false;21     }22 }

 

   首先就先看看一段代碼(單線程樣本-1)。雖然程式執行了兩個方法和一個迴圈,但是這些迴圈和方法都是按照順序執行的,最先的當然是程式的入口:main方法了,接下來就是一個迴圈,再接著是add()方法,最後就是max(int x, int y)方法。然而有沒有一種方式可以讓這段代碼中的迴圈、add()、和max(int x, int y),一起(同時)執行,而不用等前面的那個執行完才能執行呢?那麼答案就來了——多線程。我覺得多線程突出的就是“同時”。很多我看的一些書和視頻幾乎都是拿“車站售票”的例子來講,這個挺容易理解。

         1.2:Thread類:線程類。

                   1.2.1:如何建立線程。

                            1:建立一個類繼承 Thread類,重寫run方法。

                            class MyThread extends Thread{

                                     public void run(){   }

                            }

                            MyThread mt = new MyThread();

                            mt.start( );//啟動線程。

                            2:建立一個類實現Runnable介面。重寫run方法。

                            class MyRunnable implements Runnable{

                                     public void run(){   }

                            }

                            MyRunnable mr = new MyRunnable();

                            Thread t1 = new Thread(mr);

                            t1.start();

        調用start()方法和直接調用run()方法是有很大區別的,調用start()方法是真正的達到了開啟一個線程的目的,而調用run()方法只不過是普通的方法調用而已,不涉及線程的開啟。

                            3:建立線程的2種方式比較

                                     優先採用實現Runnable介面。因為實現的同時還可以繼承。當多個線程訪問同一個資源的時候,這個時候只能採用實現。如果繼承和實現都可以解決需求,建議優先使用實現。

         1.2.2:常用的方法。

                            1:start():啟動線程

                            2:getName()   :如何獲得當前線程的名字。預設名字為Thread-編號。main方法所在的線程;main

                            3: currentThread:當前線程的引用。靜態方法。代碼寫在哪個線程內部就可以獲得這個線程的對象。   Thread.currentThread( )

                            4:設定線程名稱。

                                     4.1:建立線程對象的時候,將線程名稱傳給構造方法

                                     4.2:調用setName方法。設定線程名稱。

                            5:獲得線程的優先順序   getPriority(),預設優先順序為5.                      

6:設定優先權。    setPriority( ),優先順序範圍1-10.優先順序高的獲得cpu的執行的機會會更多,但是並不能保證一定可以最先拿到cpu的執行權。

                            7:睡眠    sleep (  )

                            8:合并         join(  ) ,   哪個線程調用此方法,則這個線程先執行完。再執行其他的線程。如果線程A需要線程B的執行結果,這個時候可以線上程 A中,用線程B調用join方法。讓線程B先執行完。線程A再執行。

                            9:禮讓   yield()  效果不明顯。

                            10:setDaemon(boolean)   :設定當前線程為守護線程或者使用者線程。

                            預設情況下,線程都是為前台線程,那麼所有的線程執行完,則這個進程就執行完。如果一個進程中有後台線程,當前台線程執行完後,如果後台線程沒有執行完,那麼這個時候後台線程停止執行,進程結束。前台線程執行完後則整個進程就會結束。也就是當進程中只剩下守護線程了沒有執行完,那麼不管守護線程有沒有執行完,它都要停止執行了。

          11:控制線程。

                              1:將線程設定為後台線程,

                              2:可以用boolean 類型的變數。

                      12:中斷線程 interrupt(  )

                      13:獲得線程的狀態   getState()

                                     new -----未啟動的線程

                                     Runnable------正在執行的線程

                                     Timed-waitting----正在睡眠的狀態

                                     TERMINATED ---- 已經退出的線程。

                                     BLOCK-----受阻塞的線程。未拿到鎖或者未拿到cpu的線程的.

========================================================================

《Java多線程(二)》

       

Java多線程(一)初步瞭解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.