尚矽谷_每日一考_427

来源:https://www.cnblogs.com/zWANG97/archive/2023/03/01/17169531.html
-Advertisement-
Play Games

此方式可直接將 IDEA 中項目上傳到 Gitee 倉庫,無需打開 Gitee 手動創建空倉庫。 前提環境 安裝好 Git,併在 IDEA 中成功配置; 註冊有 Gitee 賬號,並記得賬號密碼; IDEA 中安裝名字為 Gitee 的插件,併在版本控制設置中找到 Gitee 選項,添加並登陸你的 ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何畫好一張架構圖,要做好這件事情首先要回答的就是什麼是架構圖。我們日常工作中經常能看到各種各樣的架構圖,而且經常會發現大家對架構圖的理解各有側重。深入追究到這個問題,可能一下子還很難有一個具象的定義,如果我們把這個問題進行拆分,理解起來就會容易一點。 ...
  • 1. JPA 1.1. 性能直接受底層JDBC驅動性能的影響 1.2. 性能提升是通過改變實體類的位元組碼來實現的 1.2.1. 在類載入到JAR文件或者由JVM運行之前增強位元組碼的方法 1.2.1.1. 在編譯過程中完成的 1.2.1.2. 在實體類編譯完成後,它們會被傳遞給一個特定實現的後置處理器 ...
  • 一、前戲 在之前我們已經學會使用 pytest-html 插件生成 html 格式的測試報告: 1 # 第一步,安裝插件 2 pip install pytest-html 3 ​ 4 # 第二步,執行用例時使用 --html 參數 5 ## main 函數中執行 6 if __name__ == ...
  • MyBatis的關聯映射02 3.一對多 3.1基本介紹 mybatis – MyBatis 3 | XML 映射器 多對一關係也是一個基本的映射關係,多對一,也可以理解為一對多。例如: User--Pet:一個用戶可以有多只寵物 Dep--Emp:一個部門有多個員工 雙向的多對一關係:通過User ...
  • 背景 公司目前主要聚焦於視頻這個領域,利用視頻為媒體、文旅、會議等行業進行賦能。 既然聚焦於視頻領域,那麼視頻轉碼則是繞不開的話題。 為了降低成本,以及保證產品的核心能力,公司自建了一套轉碼系統。 轉碼服務除了儘可能多的相容業界的視頻格式外,轉碼的速度是另一個非常重要的指標。 因為視頻轉碼對用戶來說 ...
  • 一、固件使用背景 在執行測試用例時,我們常常需要在測試用例執行的前後去完成一些額外的操作。例如針對於 Web 測試,在用例執行前需要打開瀏覽器,完成用戶登錄等一系列前置操作;在用例執行完成後,要清除瀏覽器緩存,關閉瀏覽器...... Pytest 框架提供的固件機制(又稱為夾具)可以幫我們實現一系列 ...
  • 約定 口 = 1 Byte,用於具象化,方便眼睛對比長度; void = 空類型; C語言中,short、long、singned、unsigned都為說明符,可以改變標識符存儲大小; C語言中,在聲明整型變數時,如果聲明中已經有一個其他的(同等)說明符,那麼關鍵字int可以省略; C語言中,預設使 ...
  • 本小節介紹應用程式的 ApplicationMaster 在 NodeManager 成功啟動並向 ResourceManager 註冊後,向 ResourceManager 請求資源(Container)到獲取到資源的整個過程,以及 ResourceManager 內部涉及的主要工作流程。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...