427
1.談談你對程式、行程、執行緒的理解,
程式:programm,為完成某個任務,采用某種編程語言撰寫的一組命令的集合,是一段靜態代碼,
行程:process,正在運行的程式,如運行中的wechat等,有一個生命周期,
執行緒:thread,一個程式內部的執行路徑,
例如,360軟體,啟動后,程式運行,其中每一個功能代表一個執行緒,表明該軟體是支持多執行緒的,
重點:如何創建多執行緒
2.代碼完成繼承 Thread 的方式創建分執行緒,并遍歷100 以內的自然數,
//步驟
//1.創建一個繼承于thread的子類
class Mythread extends Thread{
//2.重寫Thread的run()方法-->將此執行緒執行的操作宣告在run()中
public void run(){
for(int i = 0; i < 100; i++){//自然數是指非負整數
System.out.println(i);
}
}
}
public class ThreadTest{
public static void mian(String[] args){
//3.創建Thread類的子類
Mythread t1 = new MyThread();//mian方法,主執行緒做的
//4.通過此物件呼叫start
t1.start();//Thread中的方法,start方法會自動呼叫執行run()方法,t1開始獨立執行|1.啟動當前執行緒2.呼叫當前執行緒的run(),已重寫的
}
}
3.代碼完成實作Runnable 介面的方法創建分執行緒,并遍歷 100以內的自然數,
/*1.創建一個類實作Runnable介面
2.重寫run方法
3.創建類的實體
4.將實體物件傳入Thread類的構造器,并創建新的執行緒物件
5.用該物件呼叫start方法,啟動執行緒,并呼叫run方法,從Thread的原始碼可知,該方法呼叫了Runnable型別的target的run()
*/
class Mythread implements Runnable{
public void run(){
for(int i = 0; i < 100; i++){
System.out.println(i);
}
}
}
public class Mythread{
public static void main(String[] args){
Mythread myThread = new Mythread();
Thread t1 = new Thread(MyThread);
t1.start();
}
}
4.對比兩種創建方式,
1.都重寫run方法
2.用實作Runnable介面的方法創建物件可以避免java單繼承機制帶來的局限;
3.用實作Runnable介面的方法,可以實作多個執行緒共享同一段代碼(資料,如買票時的票數);
MyThread myThread = new MyThread();
MyThread t1 = new Thread(myThread);
MyThread t2 = new Thread(myThread);
4.程式有同步邏輯需求,則使用Runnable的方法來創建執行緒,
5.說說你對 IDEA 中Project 和Module 的理解,
對應Eclipse中的WorkSpace和Project
執行緒創建方法詳解
1.繼承Thread
//步驟
//1.創建一個繼承于thread的子類
class Mythread extends Thread{
//2.重寫Thread的run()方法-->將此執行緒執行的操作宣告在run()中
public void run(){
for(int i = 0; i < 100; i++){//自然數是指非負整數
System.out.println(i);
}
}
}
public class ThreadTest{
public static void mian(String[] args){
//3.創建Thread類的子類
Mythread t1 = new MyThread();//mian方法,主執行緒做的
//4.通過此物件呼叫start
t1.start();//Thread中的方法,start方法會自動呼叫執行run()方法,t1開始獨立執行|1.啟動當前執行緒2.呼叫當前執行緒的run(),已重寫的
t1.run();//不可以的,沒有啟動新執行緒,還是main
//可以呼叫獲取當前執行緒名的方法查看,Thread.currentThread().getName()
t1.start();//兩次呼叫,該方法會拋例外
//可以新建執行緒物件
Mythread t2 = new MyThread();
t2.start();
for(int j = 0; j<=100; j++){
System.out.println("helloWorld")//主執行緒執行的,與上條陳述句共同爭奪執行緒CUP
}
}
}
創建Thread類的匿名子類的方式
new Thread(){
public void run(){
for(int i = 0; i <= 100; i++){//自然數是指非負整數
System.out.println(i);
}
}
}.start();
2.實作runnable介面
//1.創建一個實作了Runnable介面的類
class MyThread implements Runnable{
//2.實作 類去實作Runnable中的方法:run()
public void run(){
for(int i = 0; i<100; i++){
System.out.println(i);
}
}
}
public class MyThread{
public static void main(String[] args){
//3.創建實作類的物件
MyThread myThread = new MyThread();
//4.將此物件作為引數傳到Thread類的構造器中,創建Thread類的物件
MyThread t1 = new Thread(myThread);
//5.通過Thread類的物件呼叫start(),呼叫了Runnable型別的target的run()
t1.start();
}
}
拓展
創建執行緒的方式3:實作 Callable 介面,
特點:
1.與 Runnable 相比,Callable 可以有回傳值,回傳值通過 FutureTask 進行封裝,
2.Callable需要依賴FutureTask,用于接收運算結果,一個產生結果,一個拿到結果,3.
FutureTask是Future介面的實作類,也可以用作閉鎖,
異同:
(1)Callable規定的方法是call(),而Runnable規定的方法是run().
(2)Callable的任務執行后可回傳值,而Runnable的任務是不能回傳值的,
(3)call()方法可拋出例外,而run()方法是不能拋出例外的,
(4)運行Callable任務可拿到一個Future物件, Future表示異步計算的結果
public class MyCallable implements Callable<Integer> {
public Integer call() {
return 666;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable myThread = new MyCallable();
FutureTask<Integer> ft = new FutureTask<>(myThread);
Thread t1 = new Thread(ft);
t1.start();
System.out.println(ft.get());
}
參考文章鏈接:https://blog.csdn.net/qq_42253147/article/details/94330841
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545416.html
標籤:其他
上一篇:安裝java以及運行環境配置
