多執行緒(一)
阿新 • • 發佈:2020-06-28
面試題
1.談談你對程式、程序、執行緒的理解
程式(program)是為完成特定任務、用某種語言編寫的一組指令的集合。即指一段靜態的程式碼,靜態物件。
程序(process)是程式的一次執行過程,或是正在執行的一個程式。程序作為資源分配的單位,系統在執行時會為每個程序分配不同的記憶體區域
執行緒(thread),程序可進一步細化為執行緒,是一個程式內部的一條執行路徑。
2.程式碼完成繼承 Thread 的方式建立分執行緒,並遍歷100以內的自然數
/** * 多執行緒的建立,方式一:繼承於Thread類 * 1.建立一個繼承於Thread類的子類 * 2.重寫Thread的run()方法 ---> 將此執行緒的方法宣告在run()中 * 3.建立Thread類的子物件 * 4.通過此物件呼叫start() * * 例子:遍歷100以內的自然數 * * 說明:高優先順序的執行緒要搶佔低優先順序執行緒cpu的執行權。 * 但是隻是從概率上講,高優先順序的執行緒高概率的情況下被執行。 * 並不意味著只有當高優先順序的執行緒執行完以後,低優先順序的執行緒才會被執行。 * * @author alpaca * @create 2020-06-28 9:11 */ //1.建立一個繼承於Thread類的子類 class MyThread extends Thread{ //2.重寫Thread類的run() @Override public void run() { for(int i=0;i<1000;i++){ System.out.println(Thread.currentThread().getName() + ":" +Thread.currentThread().getPriority()+":"+ i); } } } public class ThreadTest { public static void main(String[] args) { //3.建立Thread類的子物件 MyThread t1 = new MyThread(); t1.setName("執行緒一:"); //設定分執行緒的優先順序 t1.setPriority(Thread.MAX_PRIORITY); //4.通過此物件呼叫start():①啟動當前執行緒 ②呼叫當前執行緒的run() t1.start(); Thread.currentThread().setName("主執行緒:"); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); //如下操作仍在main執行緒中執行的 for(int i=0;i<500;i++){ if(i%2==0) { //i.sout System.out.println(Thread.currentThread().getName() + ":" +Thread.currentThread().getPriority() + ":"+i + "****main()****"); } } } }
3.程式碼完成實現 Runnable 介面的方式建立分執行緒,並遍歷100以內的自然數
/** * * 建立多執行緒的方式二:實現Runnable介面 * 1.建立一個實現了Runnable介面得類 * 2.實現類去實現Runnable中的抽象方法:run() * 3.建立實現類的物件 * 4.將此物件作為引數傳遞到Thread類的構造器中,建立Thread類的物件 * 5.通過Thread類的物件呼叫start() * * * @author alpaca * @create 2020-06-28 11:42 */ //1.建立一個實現了Runnable介面得類 class MThread implements Runnable{ //2.實現類去實現Runnable中的抽象方法:run() @Override public void run() { for(int i = 0;i < 100;i++){ System.out.println(Thread.currentThread().getName() + ":" + i); } } } public class ThreadTest1 { public static void main(String[] args) { //3.建立實現類的物件 MThread m1 = new MThread(); //4.將此物件作為引數傳遞到Thread類的構造器中,建立Thread類的物件 //Ctrl + P 可以檢視引數 Thread t1 = new Thread(m1); //5.通過Thread類的物件呼叫start():①啟動執行緒 // ②呼叫當前執行緒的run() --> 呼叫了Runnable型別的target的run() t1.start(); //再啟動一個執行緒,遍歷100以內的自然數 Thread t2 = new Thread(m1); t2.setName("執行緒2"); t2.start(); } }
4.對比兩種建立方式
開發中:優先選擇:實現Runnable介面的方式
原因:1. 實現的方式沒有類的單繼承性的侷限性
2. 實現的方式更適合來處理多個執行緒有共享資料的情況。
聯絡:public class Thread implements Runnable
相同點:兩種方式都需要重寫run(),將執行緒要執行的邏輯宣告在run()中。
5.說說你對 IDAE 中 Project 和 Moudule 的理解
IDAE 中首先建立一個工程 (Project) ,最頂級的結構,
在工程下面可以宣告一個一個的模組 (Moudule)