進程:計算機需要執行多個程序,所以需要分成多個小任務,每一個就是一個進程
線程:進程可以分爲多個可執行的小任務,每一個就是一個線程
計算機上的任務是由CPU來執行的,在某個時間點,某個核中只能執行一個進程。
而進程是由線程組成,所以同一時刻CPU只能執行某個線程
多線程:
線程的工作職責分爲和CPU交互或者和硬件交互,當線程和硬件交互時,CPU處於空閒狀態,
多線程則可以提高CPU的利用率(理論上最好狀態是100%)
創建多線程方式:
繼承Thread類
線程競爭圖:
//main方法是主線程,
public static void main(String[] args) {
//不需要創建主線程,JAVA虛擬機會自動創建
//創建支線程
TDemo t1=new TDemo("1111");
TDemo t2=new TDemo("2222");
//使用父類Thread中的start()方法,開啓線程
t1.start();
t2.start();
//然後再運行一下主線程,看運行效果
for (int i = 0; i < 20; i++) {
System.out.println("這是主線程"+i);
//主線程也可以休眠,直接使用Thread類名,調用sleep()方法,可以讓主線程休眠
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//代表線程的類--->描述線程的任務信息
class TDemo extends Thread{
//用來記錄線程名字,方便看到運行效果
private String name;
public TDemo(String name){
super();
this.name=name;
}
//一定要重寫的方法 run(),線程的具體任務信息是在方法裏面進行描述
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(name+"i="+i);
//爲了看到演示效果,線程休眠
try {
// 線程休眠可能會不能再次激活,所以必須自己捕獲
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
運行結果:
但是這種方式並不靈活,JAVA中是單繼承,如果當前類繼承了Thread類,就不能繼承其他的類,所以使用繼承非常的不靈活
下一篇,將使用實現Runnable接口,實現線程
JAVA版線程基礎案例二:實現Runnable完成線程
提升案例,線程不安全的賣票程序(實際上把輸出改成了搶糖)
JAVA版本,線程三:線程實現賣票程序