線程,java線程
多任務處理有兩種類型:
--基於進程
--基於線程
進程:是指一種“自包容”的運行程式,由作業系統直接管理,直接運行,有自己的地址空間,每個進程一開啟都會消耗記憶體。
線程:是進程內部單一的順序控制流程。一個進程擁有多個線程。多個線程共用一個進程的記憶體空間。
主線程:
main方法一運行,就開啟主線程。
主線程特點:
1、最先開始
2、最後結束
3、可以開啟其他的子線程
4、回收資源
建立線程的方式:
方式一: 繼承Thread類,然後重寫run()方法。
方式二: 實現Runnable介面,實現run()。
線程中start方法和run方法的區別:
啟動線程,應該調用線程類的start()方法,是在主線程之外,另外建立子線程。主線程和子線程交替運行。
如果直接調用run()方法,不會單獨建立子線程,是普通方法調用,會在run()執行完畢以後,再去執行其他代碼。
1 package 線程; 2 3 4 5 public class ThreadTest { 6 public static void main(String[] args) { 7 8 //方式一線程 測試 9 OneThread on=new OneThread();10 //啟動線程。線程啟動後,會調用Thread類的run()11 on.start();12 //只是普通的該方法調用,只有該方法執行完後才會執行其他方法13 on.run();14 //方式二線程 測試15 TwoThread two=new TwoThread();16 //以Runnable 介面實作類別作參數,表示線程啟動後,會調用Runnable實作類別的run()17 Thread th=new Thread(two);18 th.start();19 20 for (int i = 0; i <10; i++) {21 System.out.print(i+" "); 22 try {23 //休眠,讓當前線程休眠500毫秒,然後繼續執行24 Thread.sleep(500);25 } catch (InterruptedException e) {26 // TODO Auto-generated catch block27 e.printStackTrace();28 }29 }30 }31 32 }33 /**34 * 建立線程 方式一35 * @author Administrator36 *37 */38 class OneThread extends Thread{39 40 @Override41 public void run() {42 for (int i = 10; i < 20; i++) {43 System.out.print(i+" ");44 try {45 Thread.sleep(500);46 } catch (InterruptedException e) {47 // TODO Auto-generated catch block48 e.printStackTrace();49 }50 }51 } 52 }53 /**54 * 建立線程 方式二55 * @author Administrator56 *57 */58 class TwoThread implements Runnable{59 60 @Override61 public void run() {62 for (int i = 20; i <30; i++) {63 System.out.print(i+" ");64 }65 try {66 Thread.sleep(500);67 } catch (InterruptedException e) {68 // TODO Auto-generated catch block69 e.printStackTrace();70 }71 }72 }
線程狀態:
建立: 通過new的方式產生一個線程對象
就緒: start啟動,運行run方法
運行: 執行run方法
死亡: 線程run()方法執行完畢
睡眠: 調用線程sleep()方法
等待: 調用Object的wait()方法
掛起:調用yield()方法,線程顯示出讓CPU控制權。
阻塞: 等待IO事件輸入。如JOptionPane輸入框
線程優先順序:
當兩個或兩個以上的線程同時處理就緒狀態,那麼優先順序高的線程,會優先得到執行。線程的優先順序分為10級,預設為5級。數字越大,優先順序越高。在開發中可以通過Thread類的setPriority()改變優先順序。