java多執行緒 基礎
引入
1.什麼是執行緒
執行緒是程式執行的一條路徑, 一個程序中可以包含多條執行緒
多執行緒併發執行可以提高程式的效率, 可以同時完成多項工作
2.多執行緒的應用場景
紅蜘蛛同時共享螢幕給多個電腦
迅雷開啟多條執行緒一起下載
QQ同時和多個人一起視訊
伺服器同時處理多個客戶端請求
併發與並行
並行就是兩個任務同時執行,就是甲任務進行的同時,乙任務也在進行。(需要多核CPU)
併發是指兩個任務都請求執行,而處理器只能按受一個任務,就把這兩個任務安排輪流進行,由於時間間隔較短,使人感覺兩個任務都在執行。
比如我跟兩個網友聊天,左手操作一個電腦跟甲聊,同時右手用另一臺電腦跟乙聊天,這就叫並行。
如果用一臺電腦我先給甲發個訊息,然後立刻再給乙發訊息,然後再跟甲聊,再跟乙聊。這就叫併發。
多執行緒(Java程式執行原理和JVM的啟動是多執行緒的嗎)
A:Java程式執行原理
Java命令會啟動java虛擬機器,啟動JVM,等於啟動了一個應用程式,也就是啟動了一個程序。該程序會自動啟動一個 “主執行緒” ,然後主執行緒去呼叫某個類的 main 方法。
B:JVM的啟動是多執行緒的嗎
JVM啟動至少啟動了垃圾回收執行緒和主執行緒,所以是多執行緒的。
多執行緒的實現方式三種
1 繼承thread 類 2實現Runnable介面3使用ExecutorService、Callable、Future實現有返回結果的多執行緒
1 繼承thread 類
class MyThread extends Thread { //1,定義類繼承Thread
public void run() { //2,重寫run方法
for(int i = 0; i < 3000; i++) { //3,將要執行的程式碼,寫在run方法中
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
}
public class Test {
public static void main(String[] args) {
MyThread mt = new MyThread(); //4,建立自定義類的物件
mt.start(); //5,開啟執行緒
}
}
2實現Runnable
public class Demo3_Runnable {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable(); //4,建立自定義類物件
//Runnable target = new MyRunnable();
Thread t = new Thread(mr); //5,將其當作引數傳遞給Thread的建構函式
t.start(); //6,開啟執行緒
for(int i = 0; i < 3000; i++) {
System.out.println("bb");
}
}
}
class MyRunnable implements Runnable { //1,自定義類實現Runnable介面
@Override
public void run() { //2,重寫run方法
for(int i = 0; i < 3000; i++) { //3,將要執行的程式碼,寫在run方法中
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
}
多執行緒(獲取名字和設定名字)
new Thread("設定執行緒名字") {
public void run() {
System.out.println(this.getName() + "....獲取執行緒名字");
}
}.start();
Thread t2=new Thread() {
public void run() {
System.out.println(this.getName() + "....獲取執行緒名字");
}
}.start();
t2.setName("設定執行緒名字");
主執行緒(獲取名字和設定名字)
Thread.currentThread().getName() Thread.currentThread().setName("我是主執行緒");
多執行緒(休眠執行緒 sleep 所有執行緒都休眠)
Thread.sleep(毫秒,納秒), 控制當前執行緒休眠若干毫秒1秒= 1000毫秒 1秒 = 1000 1000 1000納秒 1000000000