多線程學習筆記(一)

一 . 使用多線程的優勢多線程

        能夠在同一時間內運行更多不一樣種類的任務dom

        注: 多線程是異步的,即代碼順序不必定是執行順序,線程被調用的時機是隨機的異步

二 . 實現多線程的方法ide

        實現多線程的方法主要有兩種:測試

        1 . 繼承Thread類spa

        2 . 實現Runnable接口線程

        3 . Thread類的結構繼承

        Thread類的結構以下:接口

        public class Thread implements Runnableget

        從上面能夠看出Thread實現了Runnable,他們之間存在多態關係 因此在試用Thread 類建立多線程時,最大的缺點是不支持多繼承,由於JAVA的特色是單繼承 因此爲了實現多繼承,能夠在建立線程時用實現Runnable接口的方式,一邊實現,一邊繼承 線程的兩種實現方式沒有本質區別,在工做時性質都是同樣的

三 . 建立多線程

    1 . 繼承Thread類

        建立一個自定義的線程類, 該類繼承自Thread, 而且重寫run()方法, 在run()方法中實現該線程要執行的任務代碼. 如:

        public class MyThread extends Thread{

            @Override

            public void run(){

                super.run();

                System.out.println("This is my first thread !");

            }

        }

        運行該線程:

        public class run{

            public static void main(String[] args){

                MyThread myThread = new MyThread();

                myThread.run();

                System.out.println("Invoke the thread end !");

            }

        }

        運行結果示意:

        

注: 此處的運行狀況是按照順序執行的,可是調用線程進行操做時,執行的順序不必定 若是屢次調用run()方法,會報出錯誤. 線程時一個子任務,CPU以不肯定的方式,或者說是隨機時間調用線程中的run()方法,因此有可能會出現執行順序不必定的狀況

 2 . 線程執行順序的不必定性

             建立一個類Mythread:

public class MyThread extends Thread {
            @Override
            public void run() {
            try {
                for (int i = 0; i < 5; i++) {
                    int time = (int) (Math.random() * 1000);
                    Thread.sleep(time);
                    System.out.println("run=" + Thread.currentThread().getName());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

        建立一個測試類

public class Test {
            public static void main(String[] args) {
                try {
                    MyThread myThread = new MyThread();
                    myThread.setName("myThread");
                    myThread.start();
                    for (int i = 0; i < 5; i++) {
                        int time = (int) (Math.random() * 1000);
                        Thread.sleep(time);
                        System.out.println("main=" + Thread.currentThread().getName());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

            運行結果

    

注:若是存在多個線程,在調用start()方法時,start()方法的順序一樣不表明線程的啓動順序

相關文章
相關標籤/搜索