run()方法,用於封裝線程運行的任務代碼。直接用建立的線程對象調用,多線程
並無產生新的線程,僅僅是當前正在運行的線程(如,主線程)在執行run方法.併發
start()方法,共有兩個做用,1,開啓了當前線程,也就是說,線程
當前程序又多了一條執行路徑和當前線程(主線程)併發執行。對象
而run()方法會被新開啓的線程運行。2,調用線程的run()方法。資源
Thread對象的run()方法在一種循環下,使線程一直運行,直到不知足條件爲止,在你的main()裏建立並運行了一些線程,調用Thread類的start()方法將爲線程執行特殊的初始化的過程,來配置線程,而後由線程執行機制調用run()。若是你不調用start()線程就不會啓動。配置
由於線程調度機制的行爲是不肯定的,因此每次運行該程序都會有不一樣的結果,你能夠把你的循環次數增多些,而後看看執行的結果,你會發現main()的線程和Thread1是交替運行的。循環
4.還有就是儘管線程的調度順序是不固定的,可是若是有不少線程被阻塞等待運行,調度程序將會讓優先級高的線程先執行,而優先級低的線程執行的頻率會低一些。程序
線程的啓動是比較複雜的,須要爲線程分配資源,它的START方法被調用時系統纔會爲線程分配資源。方法
你上面調用線程的run方法只能算普通的方法調用同樣,得運行完run裏面的代碼整個程序才能往下進行,而若是調用start方法,線程和MAIN方法就會搶資源,打印的語句會交替出現,你把線程裏的循環次數加到300,試一下依次調run、start和兩次都調start方法時所出現的狀況應該能看出點端倪~~~阻塞