java執行緒學習
java執行緒學習
一.概念辨析
1.程式:是一個正在進行中的程式
每一個程式執行都有一個執行順序。該順序是一個執行路徑(執行情景),或者叫一個控制單元。
2.執行緒:程式中一個獨立的控制單元
執行緒在控制著程式的執行
一個程式至少有一個執行緒
3.多執行緒
一個程式中有多個執行路徑,這多個執行路徑可以完成相同的功能,也可以完成不同的功能。
舉個例子:::
class Demo extends Thread
{
public void run(){
for(int i=0;i<50;i++){
System.out.println("thread:"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
//例項化一個物件,就以為意味著建立了一個執行緒
Demo d = new Demo();
d.start();
for(int i=0;i<40;i++){
System.out.println("Hello World:"+i);
}
}
}
二、疑問
1.發現每次執行結果都不一樣的原因
舉個例子:
class Thread_01 extends Thread{
public void run(){
for(int i=0;i<=40;i++){
System.out.println("thread_01"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
Thread_01 t= new Thread_01();
t.start();//啟動執行緒,並執行執行緒中定義的run()
//主執行緒main中的程式碼
for(int i=0;i<30;i++){
System.out.println("主執行緒main():執行中"+i);
}
}
}
執行結果:
交替輸出,且每次輸出的結果都不一樣的
-------------------------------------------------------------
demo_02:
class Thread_02 extends Thread{
public void run(){
for(int i=0;i<=40;i++){
System.out.println("thread_01"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
Thread_01 t= new Thread_01();
t.run();//只是相當於普通的物件呼叫方法而已,執行緒是建立了,但是沒有start()方法啟動,執行路徑不存在,所以還是以main()方法的駐現場執行的程式碼
//主執行緒main中的程式碼
for(int i=0;i<30;i++){
System.out.println("主執行緒main():執行中"+i);
}
}
}
執行結果:
thread_01
thread_02
thread_03...
thread_029
主執行緒main():執行中1
主執行緒main():執行中2
...
主執行緒main():執行中29
總結:
start():啟動執行緒,並執行run()方法中的程式碼;
run():如果只是單純的呼叫run(),那麼與普通的物件呼叫方法的原理是沒有區別的。
三、建立執行緒的方法
1.繼承Thread類,覆蓋或者重寫run()方法
步驟:
1.定義類繼承Thread類
2.覆蓋(重寫)run()方法(目的:自定義執行緒要執行的程式碼)
3.物件呼叫start()方法,開啟執行緒
注意:開啟執行緒,並執行run()方法(這裡的執行,並不一定就是立刻執行,有這個可能,cpu的“任性”---如果人品好。可能就會看到立刻執行的效果)
2:待新增。。
1.程式:是一個正在進行中的程式
每一個程式執行都有一個執行順序。該順序是一個執行路徑(執行情景),或者叫一個控制單元。
2.執行緒:程式中一個獨立的控制單元
執行緒在控制著程式的執行
一個程式至少有一個執行緒
3.多執行緒
一個程式中有多個執行路徑,這多個執行路徑可以完成相同的功能,也可以完成不同的功能。
舉個例子:::
class Demo extends Thread
{
public void run(){
for(int i=0;i<50;i++){
System.out.println("thread:"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
//例項化一個物件,就以為意味著建立了一個執行緒
Demo d = new Demo();
d.start();
for(int i=0;i<40;i++){
System.out.println("Hello World:"+i);
}
}
}
二、疑問
1.發現每次執行結果都不一樣的原因
因為多個執行緒都在獲取cpu的執行權,cpu執行到那個執行緒,當前執行緒就執行。我把這個稱為“cpu的任性”。cpu在高速切換中,在每個執行緒上停留時間也是隨機的。
2.run()方法和start()方法的區別--面試要點舉個例子:
class Thread_01 extends Thread{
public void run(){
for(int i=0;i<=40;i++){
System.out.println("thread_01"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
Thread_01 t= new Thread_01();
t.start();//啟動執行緒,並執行執行緒中定義的run()
//主執行緒main中的程式碼
for(int i=0;i<30;i++){
System.out.println("主執行緒main():執行中"+i);
}
}
}
執行結果:
交替輸出,且每次輸出的結果都不一樣的
-------------------------------------------------------------
demo_02:
class Thread_02 extends Thread{
public void run(){
for(int i=0;i<=40;i++){
System.out.println("thread_01"+i);
}
}
}
public class Demo_01
{
public static void main(String args[]){
Thread_01 t= new Thread_01();
t.run();//只是相當於普通的物件呼叫方法而已,執行緒是建立了,但是沒有start()方法啟動,執行路徑不存在,所以還是以main()方法的駐現場執行的程式碼
//主執行緒main中的程式碼
for(int i=0;i<30;i++){
System.out.println("主執行緒main():執行中"+i);
}
}
}
執行結果:
thread_01
thread_02
thread_03...
thread_029
主執行緒main():執行中1
主執行緒main():執行中2
...
主執行緒main():執行中29
總結:
start():啟動執行緒,並執行run()方法中的程式碼;
run():如果只是單純的呼叫run(),那麼與普通的物件呼叫方法的原理是沒有區別的。
三、建立執行緒的方法
1.繼承Thread類,覆蓋或者重寫run()方法
步驟:
1.定義類繼承Thread類
2.覆蓋(重寫)run()方法(目的:自定義執行緒要執行的程式碼)
3.物件呼叫start()方法,開啟執行緒
注意:開啟執行緒,並執行run()方法(這裡的執行,並不一定就是立刻執行,有這個可能,cpu的“任性”---如果人品好。可能就會看到立刻執行的效果)
2:待新增。。
相關文章
- java 執行緒學習Java執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒學習Java執行緒
- Java 執行緒池學習Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- Java 多執行緒NIO學習Java執行緒
- Java多執行緒(學習篇)Java執行緒
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 【java學習】ThreadPoolExecutor 執行緒池Javathread執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- 重新學習Java執行緒原語Java執行緒
- java學習筆記--多執行緒Java筆記執行緒
- Java學習筆記之執行緒Java筆記執行緒
- java多執行緒學習小案例Java執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- java學習筆記.04——執行緒池Java筆記執行緒
- 最全java多執行緒學習總結1--執行緒基礎Java執行緒
- 執行緒池學習執行緒
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- 從使用到原理學習Java執行緒池Java執行緒
- Java學習之併發多執行緒理解Java執行緒
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- Java執行緒同步的方法--Java免費學習網Java執行緒
- 【Java】多執行緒複習Java執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- 多執行緒學習(二)執行緒
- 多執行緒學習一執行緒
- iOS 多執行緒-學習iOS執行緒
- Java多執行緒學習(六)Lock鎖的使用Java執行緒
- JAVA學習筆記之 多執行緒賣票Java筆記執行緒