JAVA基礎:八、線程

多線程和多進程?
1、概念
早期的操作系統是單進程的,比如DOS,同一時刻只能做一個事情,IOS系統是單進程操作系統,蘋果規定了只有音樂類和地圖類等固定類型的APP擁有後臺保留進程。
多進程:
    在操作系統中能(同時)運行多個任務(程序)
    例如:Android是多進程系統,每啓動一個軟件就啓動一個進程。
多線程:
    在同一應用程序中有多個順序流(同時)執行    例如:一邊顯示應用程序主界面,一邊下載文件、播放音樂。
總結進程和線程:看圖
    線程就是進程中一個程序執行的流程,一邊執行一個流程,一邊執行另一個流程。
實現多線程的代碼:
自定義線程類:
package com.ideal.demo;
public class IdealThread extends Thread {
 public void run() {
  for (int i = 0; i < 100; i++) {
   System.out.println("☆☆ideal的線程☆☆"+i);
   try {
    sleep(1000); //線程休眠1000毫秒
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

測試類:
package com.ideal.demo;
public class Test {
 public static void main(String[] args) {
  //生成自定義線程類的對象
  IdealThread it = new IdealThread();
  //啓動線程
  it.start();
  //it.run();//千萬別這樣寫
  
  for (int i = 0; i < 100; i++) {
   System.out.println("★★程序主線程★★"+i);
  }
  
 }
}

線程休眠(暫停執行),以“減慢線程”。
當線程睡眠時,它睡在某個地方,在甦醒之前不會返回到可運行狀態。
當睡眠時間到期,則返回到可運行狀態。
 
線程睡眠的原因:線程執行太快,或者需要強制進入下一輪,因爲Java規範不保證合理的輪換。
 
睡眠的實現:調用靜態方法。
 try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }
 
睡眠的位置:爲了讓其他線程有機會執行,可以將Thread.sleep()的調用放線程run()之內。這樣才能保證該線程執行過程中會睡眠。
注意:
1、線程睡眠是幫助所有線程獲得運行機會的最好方法。
2、線程睡眠到期自動甦醒,並返回到可運行狀態,不是運行狀態。sleep()中指定的時間是線程不會運行的最短時間。因此,sleep()方法不能保證該線程睡眠到期後就開始執行。
3、sleep()是靜態方法,只能控制當前正在運行的線程。
實例二:一個計數器,計數到100,在每個數字之間暫停1秒,每隔10個數字輸出一個字符串
public class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 100; i++) {
            if ((i) % 10 == 0) {
                System.out.println("-------" + i);
            }
            System.out.print(i);
            try {
                Thread.sleep(1000);
                System.out.print("    線程睡眠1秒!\n");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new MyThread().start();
    }
}



發佈了44 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章