java并發編程之美-第1章 并發編程線程基礎-線程的創建與運行

文章目錄

  • 1.什么是線程
  • 2. 線程創建和運行


1.什么是線程

進程是操作系統進行資源分配和調度的基本單位,線程是 CPU 分配的基本單位。
在這里插入圖片描述

  • 程序計數器用來記錄線程當前要執行的指令地址。CPU一般是使用時間片輪轉方式讓線程輪詢占用的,程序計數器是記錄線程讓出CPU時的執行地址的,待再次分配到時間片時線程就可以從自己私有的計數器指定地址繼續執行。另外需要注意的是,如果執行的是 native 方法那么 pc計數器記錄的是 undefned 地址,只有執行的是 Java 代碼時 pc計數器記錄的才是下一條指令的地址。
  • 棧用于存儲線程的局部變量,調用棧幀。
  • 堆里面主要存放 new創建的對象實例。
  • 方法區存放 加載的類、常量及靜態變量等信息。

2. 線程創建和運行

java中創建線程的三種方式:繼承Thread類,實現Runnable接口,實現Callable接口 。

  • 繼承Thread類
public class MyThread extends Thread{@Overridepublic void run() {System.out.println (" I am a child thread,線程id:"+this.getId()+"線程名字:"+this.getName()) ;System.out.println (" I am a child thread,線程id:"+Thread.currentThread().getId()+"線程名字:"+Thread.currentThread().getName()) ;System.out.println (System.getProperty("java.version")+","+System.getProperty("java.vendor")+","+System.getProperty("java.vendor.url"));}public static void main(String[] args) {MyThread thread= new MyThread();//創建線程thread.start();// 啟動線程}
}
  • 實現Runnable接口
public class RunableTask implements Runnable{@Overridepublic void run() {System.out.println (" I am a child thread,線程id:"+Thread.currentThread().getId()+"線程名字:"+Thread.currentThread().getName()) ;}public static void main(String[] args) {RunableTask task = new RunableTask();new Thread(task).start() ;new Thread(task).start() ;}
}
  • 實現Callable接口
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallerTask implements Callable<String> {@Overridepublic String call() throws Exception {return "hello";}public static void main(String[] args) {// 創建異步任務FutureTask<String> futureTask=new FutureTask<>(new CallerTask()) ;//啟動線程new Thread(futureTask).start() ;try { //等待任務執行完畢,并返回結果String result = futureTask.get();System.out.println(result);} catch (ExecutionException | InterruptedException e){e.printStackTrace();}}
}

調用了start方法后才真正啟動了線程。其實調用start方法后線程并沒有馬上執行而是處于就緒狀態,這個就緒狀態是指該線程已經獲取了除 CPU 資源外的其他資源,等待獲取 CPU 資源后才會真正處于運行狀態。一旦 run 方法執行完畢,該線程就處于終止狀態。
使用繼承方式的好處是,在run()方法內獲取當前線程直接使用this就可以了,無須使用 Thread.currentThread()方法;不好的地方是Java不支持多繼承,繼承了 Thread 類不能繼承其他類。另外任務與代碼沒分離,多個線程執行一樣的任務時需要多份任務代碼。
Runable接口實現的,兩個線程可以共用一個 task 代碼邏輯,可以給RunableTask添加參數進行任務區分。
Callable 接口實現的任務有返回值,通過futureTask.get()等待任務執行完畢并返回結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44240.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44240.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44240.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Django】報錯‘staticfiles‘ is not a registered tag library

錯誤截圖 錯誤原因總結 在django3.x版本中staticfiles被static替換了&#xff0c;所以這地方換位static即可完美運行 錯誤解決

callBack方式實現threejs點擊事件Raycaster

我用的的示例類發方式來初始化場景。 類里面定義點擊方法。 initMouse(fun) {window.addEventListener("click", (event) > {this.clickObject(event, fun);});}// 鼠標事件clickObject(event, fun) {// 計算點擊位置的歸一化設備坐標const mouse new THREE.Ve…

IO模型理論學習

1、什么是IO 計算機視角下的io AIO

“泰迪·曲靖師范學院數學與統計學院數據科學教學實訓平臺”工作室簽約揭牌儀式圓滿結束

為深化校企合作&#xff0c;實現應用型人才培養目標。泰迪智能科技攜手曲靖師范學院數學與統計學院共建“數據科學教學實訓平臺工作室”。 2024年7月10日&#xff0c;“?泰迪數學與統計學院數據科學教學實訓平臺”工作室揭牌儀式在曲靖師范學院舉行。泰迪智能科技昆明分公司院…

LPRNet 車牌識別部署 rk3588(pt-onnx-rknn)包含各個步驟完整板端代碼

雖然車牌識別技術很成熟了&#xff0c;但完全沒有接觸過。一直想搞一下、整一下、試一下、折騰一下&#xff0c;工作之余找了一個簡單的例子入個門。本博客簡單記錄一下 LPRNet 車牌識別部署 rk3588流程&#xff0c;訓練參考 LPRNet 官方代碼。 1、導出onnx ??導出onnx很容易…

EtherCAT設備配置:SCI EoeMacIp 文件與實際設備配置的比較過程

標題&#xff1a;EtherCAT設備配置&#xff1a;SCI文件與實際設備配置的比較過程 在工業自動化領域&#xff0c;EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作為一種高效的實時以太網協議&#xff0c;正在被廣泛應用。在EtherCAT網絡的配置過…

SW - 將面導出為dxf

文章目錄 SW - 將面導出為dxf概述筆記原點問題END SW - 將面導出為dxf 概述 在做PCB板框. 以前做過一個筆記&#xff0c;用autoCAD來制作導出dxf(cadence SPB17.4 - 用autoCAD2022畫一個PCB板框)。 不喜歡用autoCAD&#xff08;相對麻煩&#xff09;, 還是喜歡用SW&#xff0…

異步日志:性能優化的金鑰匙

一、背景 2024 年 4 月的一個寧靜的夜晚&#xff0c;正當大家忙完一天的工作準備休息時&#xff0c;應急群里“咚咚咚”開始報警&#xff0c;提示我們余利寶業務的贖回接口成功率下降。 通過 Monitor 監控發現&#xff0c;該接口的耗時已經超過了網關配置的超時閾值(2s)&#…

Spring Cloud Alibaba整合Seata實戰

Spring Cloud Alibaba整合Seata實戰 1.啟動Seata Server 1.1 環境準備 1&#xff09;指定nacos作為配置中心和注冊中心 修改registry.conf文件 注意&#xff1a;客戶端配置registry.conf使用nacos時也要注意group要和seata server中的group一致&#xff0c;默認group是&quo…

我的PHP8編譯日志

編譯命令在arm和x86架構上是一樣的&#xff0c;如果缺少依賴庫&#xff0c;按需要安裝&#xff1a; 登錄后復制 yuminstall libcurl libcurl-devel yum install openssl openssl-devel yum install pcre2 pcre2-devel yum install libxml2 libxml2-devel 1.2.3.4. 配置和編譯&…

Linux--生產消費模型

線程系列&#xff1a; Linux–線程的認識(一) Linux–線程的分離、線程庫的地址關系的理解、線程的簡單封裝&#xff08;二&#xff09; 線程的互斥&#xff1a;臨界資源只能在同一時間被一個線程使用 生產消費模型 生產消費模型是多線程編程和分布式系統中的一個經典概念&…

我們水冷使制動電阻功率密度成倍增加-水冷電阻設計工廠

先進陶瓷 我們后來發現工業應用中對占用空間最小的水冷電阻器的工業需求&#xff0c;推出了適用于中壓工業應用的水冷電阻器。它的特點是兩塊由具有特殊性能的先進陶瓷制成的板。 使用工業電驅動裝置的一個重要好處是&#xff0c;可靠的再生和動態制動系統可以補充或取代傳統…

Llama2 訓練指南

Llama2 是一個基于 Python 的機器學習框架&#xff0c;旨在幫助開發者快速構建和部署機器學習模型。下面是 Llama2 訓練指南&#xff0c;旨在幫助您了解如何使用 Llama2 訓練模型。 概述 Llama2 提供了多種方式來訓練模型&#xff0c;包括使用 Keras 和 TensorFlow。下面是在…

Laravel :如何將Excel文件導入數據庫

文章目錄 一、前提二、使用2.1、新建一個導入文件2.2、新建一個控制器和方法,調用導入文件2.3、 新建一個頁面&#xff0c;支持文件上傳 一、前提 想要將excel內容入庫&#xff0c;laravel有擴展可以使用,常用的擴展是maatwebsite/excel&#xff0c;安裝步驟參考上一篇&#x…

力扣 202快樂數

快樂數這題有兩個關鍵 一個是求n的 各個位上平方和 另一個是判斷是否為快樂數的依據是是否在哈希表中找到已經出現過的數 1求各個位上平方和方法 定義sum sum N除以十取余的平方和 n/10 循環終止條件是n0 2查找一個數是否出現&#xff0c;用哈希表unordered_set &…

Mosh|SQL教程第四彈(未完)

SQL有很多自帶的內聚的函數&#xff08;MAX、MIN、AVG、SUM、COUNT&#xff09; 一、聚合函數&#xff08;Aggregate Functions&#xff09; 這里的括號可以寫列名也可以寫表達式,下面是一個練習&#xff1a; 二、GROUP BY子句 統計2019-07-01以后每個客戶的總銷售額 注意這…

result.h

#ifndef ASYNCIO_RESULT_H #define ASYNCIO_RESULT_H#include <asyncio/exception.h> #include <variant> #include <optional> namespace ASYNCIO_NS {// 結果類封裝&#xff08;不是協程函數的返回類型&#xff09; template<typename T> struct Res…

Javaweb11-Filter過濾器

Filter過濾器 1.Filter的基本概念&#xff1a; 在Java Servlet中&#xff0c;Filter接口是用來處理HttpServletRequest和HttpServletResponse的對象的過濾器。主要用途是在請求到達Servlet之前或者響應離開Servlet之前對請求或響應進行預處理或后處理。 2.Filter常見的API F…

探展2024世界人工智能大會之合合信息掃描黑科技~

文章目錄 ?? 前言?? AIGC古籍修復文化遺產煥新?? 高效的文檔圖像處理解決方案?? AIGC掃描黑科技一鍵全搞定?? 行業級的大模型加速器?? 結語 ?? 前言 大家好&#xff0c;我是 哈哥&#xff08;哈哥撩編程&#xff09; &#xff0c;這次非常榮幸受邀作為專業觀眾參…

【常用知識點-Java】讀取Properties文件

Author&#xff1a;趙志乾 Date&#xff1a;2024-07-11 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 簡介 .properties文件是一種簡單的文本文件&#xff0c;用于存儲鍵值對&#xff0c;其每個鍵值對占一行&#xff0c;且鍵和值之間用…