早期的操作系統是單進程的,比如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()是靜態方法,只能控制當前正在運行的線程。
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();
}
}