2022-08-02 第七小組 房雪瑩 學習筆記
今日學習內容:
1.創建線程:
在Java中創建線程有三種方式。
1.繼承Thread類并且重寫run方法
Thread類中的run方法不是抽象方法,Thread類也不是抽象類
MyThread當繼承了Thread類之后,它就是一個獨立的線程
要讓線程啟動,調用線程的start方法
當調用start方法啟動一個現場呢個時,會執行重寫的run方法的代碼
不能直接調run,因為只有調start才能啟動線程
線程的優先級,概率問題,不是百分百
90先走主函數,10走Thread
2.實現Runnable接口
如果想要線程啟動,必須調用Thread類中的start方法
3.實現Callable接口
2.守護線程:
Java中提供兩種類型的線程:
1.用戶線程
2.守護程序線程
守護線程為用戶線程提供服務,僅在用戶線程運行時才需要
守護線程對于后臺支持任務非常有用
垃圾回收。大多數JVM線程都是守護線程
public class Ch05 extends Thread{
@Override
public void run() {
super.run();
}
public static void main(String[] args) {
Ch05 ch05 = new Ch05();
// ch05就變成了守護線程
ch05.setDaemon(true);
ch05.start();
}
}
3.創建守護線程:
任何線程繼承創建線程守護進程狀態,由于主線程是用戶線程,
因此在main方法內啟動的任何線程默認都是守護線程。
4.線程的生命周期(6個)
NEW:這個狀態主要似乎線程未被start()調用執行
RUNNABLE:線程正在JVM中被執行,等待來自操作系統的調度
BLOCKED:阻塞,因為某些原因不能立即執行需要掛起等待
WAITING:無限等待,Object類,如果沒有喚醒,則一直等待
TIMED_WAITING:有限期等待,線程等待一個指定時間
TERMINATED:終止線程的狀態,線程已經執行完畢
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
System.out.println("這是線程1---->" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
System.out.println("這是線程2---->" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();
t2.start();
try {
// t1插隊
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("----------------------");
// 分割線出現的位置,join方法的本意阻塞主線程
}
}
5.線程安全:
1.CPU多核緩存結構
物理內存:硬盤
CPU緩存為了提高程序運行性能
CPU處理速度最快,內存次之,硬盤速度最低

浙公網安備 33010602011771號