/*多線程
1.首先說進程,進程---就是正在進行的程序
每一個進程都有一個執行程序。該順序是一個執行路徑,或者叫一個控制單元
2.線程:就是進程中的一個獨立的進程單元
線程在控制著進程的執行
一個進程中至少有一個進程
Java VM(虛擬機) 啟動的時候會有一個進程 java.exe
該進程中至少有一個線程負責java程序的執行
而且這個線程運行的代碼存在於main方法中
該線程稱之為主線程
拓展:其實更細節說明JVM,jvm啟動都不止一個線程,還有負責垃圾回收機制的線程
3.如何在自定義的代碼中自定義一個線程呢?
通過對api的查找,java已經提供了對線程這類事物的描述,就Thread類
創建線程的第一種方式,繼承Thread類。
具體步驟:
1.定義類繼承Thread。
2.復寫Thread類中的run方法。
目的:將自定義代碼存儲在run方法,讓線程運行
3.調用線程的start方法
該方法有兩個作用:1.啟動線程 2.調用run方法
*/
/*
常識了解
1.CPU在無時不刻地切換,實際切換的是進程中的線程
2.速度很快,快到感覺不到
3.發現運行結果每一次都不同。因為每個線程都在獲取cpu的執行權,cpu執行到誰,誰就運行。
4.明確一點,在某一時刻,只能有一個程序在執行(多核除外)
5.cpu在做著快速的切換,已達到看上去是同時運行的效果
6.我們可以形象把多線程的運行形容為在互相搶奪cpu的執行權,體現了多線程的特性:隨機性(誰搶到誰執行,執行多長時間,cpu說了算)
*/
/*為什麼要覆蓋run方法呢?
Thread用於描述線程
該類就定義了一個功能,用於存儲線程要運行的代碼。該存儲功能就是run方法
也就是說Thread類中的run方法,用於存儲線程要運行的代碼
*/
class Demo extends Thread
{
public void run()
{
for(int i=0;i<60;i++)
{
System.out.println("Demo run"+i);
}
}
}
class ThreadDemo
{
public static void main(String args[]) /*主線程*/
{
Demo d=new Demo(); /*創建一個對象,就是新建一個線程*/ /*主線程走到這,就有一個新的控制單元被創建*/
d.start(); /*開啟線程,並執行該線程的run方法。d.run()僅僅是對象調用了方法,而線程創建了,並沒有運行*/
for(int i=0;i<60;i++)
{
System.out.println("aaa"+i);
}
}
}