Thread——线程
java線程
- 1.線程的生命周期
- 2.新建線程
- 2.1 通過繼承Thread來創建線程
- 2.2 通過實現 Runnable 接口來創建線程
- 2.3 通過實現 Callable 接口來創建線程
- 3.start、run、join的區別
- 4.設置優先級
1.線程的生命周期
線程的生命周期分為5各階段:新建、就緒、運行、阻塞、死亡(銷毀)
新建: 創建了線程還未啟動的階段
就緒: 線程處于等待分配CPU來運行的階段
運行: 線程分配到了CPU,處于執行的階段
阻塞: 在運行狀態的時候,可能因為某些原因導致運行狀態的線程變成了阻塞狀態,比如sleep()、wait()之后線程就處于了阻塞狀態,這個時候需要其他機制將處于阻塞狀態的線程喚醒,比如調用notify或者notifyAll()方法。喚醒的線程不會立刻執行run方法,它們要再次等待CPU分配資源進入運行狀態
死亡(銷毀): 線程死亡分為線程正常執行完畢后、線程被提前強制性的終止、出現異常導致線程結束三種
2.新建線程
新建線程有三種方式:
2.1 通過繼承Thread來創建線程
package thread; class myThread extends Thread{String name;myThread(String name){this.name = name;}public void run() {System.out.println("我是"+this.name+" 的run方法");}} public class thread {public static void main(String[] args) {// TODO 自動生成的方法存根myThread mt1 = new myThread("aaa");myThread mt2 = new myThread("bbb");mt1.start();mt2.start();}}2.2 通過實現 Runnable 接口來創建線程
package thread;class myThread implements Runnable{String name;myThread(String name){this.name = name;}public void run() {System.out.println("我是"+this.name+" 的run方法");}} public class thread {public static void main(String[] args) {// TODO 自動生成的方法存根myThread mt1 = new myThread("aaa");myThread mt2 = new myThread("bbb");new Thread(mt1).start();new Thread(mt2).start();} }2.3 通過實現 Callable 接口來創建線程
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask;class myThread implements Callable<Boolean>{String name;myThread(String name){this.name = name;}public Boolean call() {System.out.println("我是"+this.name+" 的call方法");return true;}} public class thread {public static void main(String[] args) {// TODO 自動生成的方法存根myThread mt1 = new myThread("aaa");myThread mt2 = new myThread("bbb");//使用 FutureTask 類來包裝 Callable 對象,該 FutureTask 對象封裝了該 Callable 對象的 call() 方法的返回值。FutureTask<Boolean> ft1 = new FutureTask<>(mt1);FutureTask<Boolean> ft2 = new FutureTask<>(mt2);new Thread(ft1).start();new Thread(ft2).start();}}
callable還有一種更復雜的創建方式,也是我剛學習時遇到的
建議用第2種創建線程,第一種由于Java是單繼承繼承Thread類后就不能繼承別的類了,而第三種比較復雜。
3.start、run、join的區別
start方法:執行start方法后線程的狀態有兩種可能,第一種進入就緒狀態等待分配CPU,第二種直接分配到了CPU進入了運行狀態。
run方法:執行線程的操作和功能,即Runnable里的run方法。
join方法:當前執行的A線程暫停,先執行調用join方法的B線程,B線程結束后A線程自動喚醒。
4.設置優先級
線程可以通過 setPriority(int) 設置優先級
參數的取值范圍:1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )
總結
以上是生活随笔為你收集整理的Thread——线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Studio OkHtt
- 下一篇: 信用卡逾期能坐高铁吗