線程是操作系統能夠運行調度的最小單位,它包含在進程之中,是進程的實際運作單位
多線程有三種實現方式
線程實現方法1,繼承Thread類(無返回值):
1、繼承Thread
2、重寫run方法(線程要執行的代碼)
3、創建子類對象,并啟動線程 .start
線程實現方法2,實現Runnable接口(無返回值):
1、自己定義一個類實現Runnable接口
2、重寫里面的run方法
3、創建自己類的對象
4、創建Thread類的對象,并開啟線程
?
線程實現方法3,實現Callable接口:
可以獲取多線程運行結果
1、創建一個類實現Callable接口
2、重寫call方法(有返回值,多線程運行的結果)--重寫時帶泛型,為返回值類型
3、創建MyCallable對象(表示多線程要執行的任務)
4、創建FutureTask對象(管理多線程運行的結果)
5、創建Thread對象,并啟動線程
線程常用方法:
Thread.sleep()
線程優先級:
默認優先級5,范圍為1-10
守護線程:setDaemon,當所有非守護線程結束后,守護線程也會終止執行
Thread.yield()禮讓線程,盡可能讓線程執行均勻
join 插入線程
線程的生命周期
線程安全
synchronized,鎖對象一般是當前類的字節碼文件(確保唯一)
synchronized可以修飾同步代碼塊&同步方法
StringBuilder是線程不安全的,StringBuffer是線程安全的
Lock手動加鎖,解鎖
多線程等待喚醒機制:
阻塞隊列:
ArrayBlockingQueue<T>,LinkedBlockingQueue<T>,這兩個隊列是線程安全的
queue.put(), queue.take()
線程池: