認識執行緒,初始併發
執行緒學習
1. 什麼是執行緒
-
程式
是為完成特定任務,用某種語言編寫的一組
指令的集合
,即指一段靜態的程式碼,靜態物件 -
程序
是程式的一次執行過程,或是正在執行的一個程式
。是一個動態的過程:有他自身的產生,存在和消亡的過程。程式是靜態的,程序是動態的;程序作為資源分配的單位,系統在執行時會為每個程序分配不同的記憶體區域。 -
執行緒
程序可進一步細化為執行緒,
是一個程式內部的一條執行路徑
。若一個程序同一時間並行執多個執行緒,就是支援多執行緒的;執行緒作為排程和執行的單位,每個執行緒擁有獨立的執行棧和程式計數器,執行緒切換的開銷小;
一個程序中,多個執行緒共享相同的記憶體單元/記憶體地址空間,也就是說他們從同一堆中訪問相同的變數和物件,這就使得執行緒間通訊更簡便、高效。但多個執行緒操作共享的系統資源可能就會帶來安全的隱患。
2. 初識併發問題
- 併發 :一個CPU(採用時間片)同時執行多個任務。比如:秒殺,多個人做同一件事
下面程式碼為例,讓我們瞭解什麼是併發:
//多個執行緒操作一個物件 //執行緒不安全,資料紊亂 public class TestThread01 implements Runnable { //票數 private int tkicketNum=10; @Override public void run() { while (true){ if(tkicketNum<1){ break; } System.out.println(Thread.currentThread().getName()+"拿到了第"+ tkicketNum-- +"張票"); } } public static void main(String[] args) { TestThread01 testThread01 = new TestThread01(); new Thread(testThread01,"張三").start(); new Thread(testThread01,"李四").start(); new Thread(testThread01,"wangwu").start(); } }
結果如下:
「其他文章」
- 執行緒池底層原理詳解與原始碼分析
- 30分鐘掌握 Webpack
- 線性迴歸大結局(嶺(Ridge)、 Lasso迴歸原理、公式推導),你想要的這裡都有
- 【前端必會】webpack loader 到底是什麼
- 中心化決議管理——雲端分析
- HashMap底層原理及jdk1.8原始碼解讀
- 詳解JS中 call 方法的實現
- 列印 Logger 日誌時,需不需要再封裝一下工具類?
- 初識設計模式 - 代理模式
- 密碼學奇妙之旅、01 CFB密文反饋模式、AES標準、Golang程式碼
- Springboot之 Mybatis 多資料來源實現
- CAS核心思想、底層實現
- 面試突擊86:SpringBoot 事務不回滾?怎麼解決?
- 基於electron vue element構建專案模板之【打包篇】
- MiniWord .NET Word模板引擎,藉由Word模板和資料簡單、快速生成檔案。
- 認識執行緒,初始併發
- 1-VSCode搭建GD32開發環境
- 初識設計模式 - 原型模式
- 執行緒安全問題的產生條件、解決方式
- 2>&1到底是什麼意思?