多線程:減輕編寫交互頻繁、涉及面多的程序的難度;充分利用計算機資源。
一個操作系統,可以有多個進程,每個進程上邊會有多個線程。一個程序的運行至少啟動兩個線程:main線程和gc(守護)線程。
線程分為前臺線程和后臺線程(守護線程):
對Java程序來說,只要有一個前臺線程在運行,這個進程就不會結束;
如果一個進程只有后臺線程在運行,這個進程就會結束;
如果某個線程對象在啟動(調用start()方法)之前調用setDaemon(true);方法,這個線程就變成了后臺線程。
線程的狀態轉換:
* 多線程的方法有兩種:
1、繼承Thread類,并重寫run()方法;
2、實現Runnable接口。
雖然有兩種不同的方法,但是它們的多線程啟動方法是相同的,都是同歸Thread類來啟動多線程的[p.start();]。
start使蓋縣程開始執行是指Java虛擬機調用該線程的run()方法;
start只是使線程就緒,什么時候開始執行由CPU決定。
線程只能啟動一次;如果啟動多次,程序在編譯時不會出現錯誤,但是執行時會出現錯誤。
兩種方法的不同在于:
方法1的缺點:Java為單繼承,當一個想實現多線程的類繼承了Thread類后就不可以再繼承其他類,這樣就不靈活,沒有擴展性了;
方法2的優點:實現Runnable接口不僅可以再繼承其他類,還可以實現資源共享。
總之實現Runnable接口比繼承Thread類要更好一些,所以盡量要使用Runnable而不用Thread。
下面就這兩種方法舉例說明:
方法1,繼承Thread類,重寫run()方法。
(每隔一秒打印一行,打印完后程序結束)