Thread線程類及多線程

1.進程、線程、并發、并行是什么?

1)進程:操作系統中可以運行多個任務(程序),這些運行的任務(程序)被稱為進程。程序的運行產生進程(內存空間、程序執行的堆棧),可以這樣說,進程是作為操作系統分配資源的基本單位。

2)線程:程序里同時可能運行多個任務(在一個CPU時間片內,順序執行流),那么每個任務(順序執行流)就叫做一個線程,即在線程內部。

3)并發:線程是并發運行的。操作系統將時間化分為若干個片段(時間片),盡可能的均勻分配給每一個任務,被分配時間片后,任務就有機會被cpu所執行。微觀上看,每個任務都是走走停停的。但隨著cpu高效的運行,宏觀上看所有任務都在運行這種都運行的現象稱之為并發,但不是絕對意義上的“同時發生”。

?4)并行:一個時間段,多個任務同時進行,而且多個CPU運行各自的進程。

?2.多線程的實現

1)繼承Thread

?通過查閱JDK API文檔,Thread 類位于java.lang中,表示進程中的執行線程。實現多線程有兩種方式。第一是繼承Thread:

 1 package cn.a1.a;
 2 
 3 public class MyThread extends Thread {
 4 
 5     @Override
 6     public void run() {
 7         System.out.println("這是多線程MyThread");
 8         for (int i = 0; i < 5; i++) {
 9             System.out.println("MyThread:" + i);
10         }
11 
12     }
13 }
 1 package cn.a1.a;
 2 
 3 public class Test1 {
 4     public static void main(String[] args) {
 5         // 創建一個多線程,此時已有兩個線程 主線程(main) 和 創建的線程 mThread1;
 6         MyThread mThread1 = new MyThread();
 7         mThread1.start();
 8 
 9         // 查看主線程main是否運行
10         for (int i = 0; i < 5; i++) {
11             System.out.println("main Thread:" + i);
12         }
13 
14     }
15 
16 }

main線程和t1線程搶占CPU 執行,輸出也是main線程和t1線程根據內部搶占CPU 執行輸出,不規則,多線程在提高CPU利用率的同時,增加程序的復雜度。

main Thread:0
這是多線程MyThread
main Thread:1
MyThread:0
main Thread:2
MyThread:1
main Thread:3
MyThread:2
MyThread:3
main Thread:4
MyThread:4

?

2)實現Runnable接口

用于定義線程要執行的任務邏輯。我們定一個類實現Runnable接口,這時我們必須重寫run方法,在其中定義我們要執行的邏輯。之后將Runnable交給線程去執行。從而實現了線程與其執行的任務分離開。將任務分別交給不同的線程并發處理,可以使用線程的重載構造方法:Thread(Runnable runnable)。解藕:線程與線程體解藕,即打斷依賴關系。 如果你學到Spring了就知道,Spring的ioc就是干這個的。

?演示:

 1 package cn.a1.a1;
 2 
 3 public class MyRun implements Runnable {
 4 
 5     @Override
 6     public void run() {
 7         System.out.println("這是MyRun");
 8         
 9         for (int i = 0; i < 3; i++) {
10             System.out.println("MyRun:" + i);
11         }
12     }
13 }

?

 1 public class Test1 {
 2     public static void main(String[] args) {
 3         MyRun tRun1  = new MyRun();
 4         Thread t1 = new Thread(tRun1);
 5         t1.start();
 6         //這里main開始運行也有產生一個進程,該進程有個主(main)線程
 7         for (int i = 0; i < 3; i++) {
 8             System.out.println("main"+i);
 9         }
10         
11     }
12 
13 }

輸出不規則的

main0
這是MyRun
MyRun:0
main1
main2
MyRun:1
MyRun:2

繼承Thread和實現Runnable接口實現多線程的優缺點

[1] 繼承Thread的線程類不能再繼承其他類,實現Runnable接口的類還可以繼承其他類。

[2] 實現Runnable接口的線程類,可以讓多個線程共享線程實現類的資源

總結:

多線程提高了cpu利用率,但程序的復雜度也隨之增加。一旦線程開始執行,很難通過其他方式控制線程的軌跡。

多個線程搶占CPU導致線程的運行軌跡不確定。

轉載于:https://www.cnblogs.com/abcdjava/p/10840670.html

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

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

相關文章

絳河 初識WCF5

然后我們在<Client>中添加一個終結點&#xff0c;這個是客戶端的終結點&#xff0c;我們前面曾經提過&#xff0c;通信實際上發生在兩個終結點間&#xff0c;客戶端也有個終結點&#xff0c;然而請求總是從客戶端首先發起&#xff0c;所以終結點地址應該填寫為服務端終結…

python修煉第四天

今天換了師傅。江湖人稱景女神^o^。 女師傅講的比較細&#xff0c;原理的比較多。初學者來說有些難。但是基本功是必須要打牢的。努力&#xff01; 迭代器 迭代器&#xff0c;迭代的工具1 什么是迭代&#xff0c;指的是一個重復的過程&#xff0c;每一次重復稱為一次迭代&#…

尷尬的存儲過程

最近在給一個已沉淀了多年的系統框架進行優化&#xff0c;發現大部分的基礎業務&#xff08;比如增刪改&#xff09;的實現都是通過存儲過程來實現。這讓我糾結了很久&#xff0c;看了下代碼格式我猜應該都是使用了代碼生成器。這無疑為系統的擴展留下了一個難以彌補的大坑。 首…

java虛擬機06-內存分區/新生代、老年代

1.原因 JVM在程序運行過程當中&#xff0c;會創建大量的對象&#xff0c;這些對象&#xff0c;大部分是短周期的對象&#xff0c;小部分是長周期的對象&#xff0c;對于短周期的對象&#xff0c;需要頻繁地進行垃圾回收以保證無用對象盡早被釋放掉&#xff0c;對于長周期對象&a…

博客作業04--樹

1.學習總結(2分) 1.1樹結構思維導圖 1.2 樹結構學習體會 樹這一章節比較復雜&#xff0c;知識點繁多&#xff0c;結合了遞歸的知識所以代碼閱讀起來會有障礙&#xff0c;難以理解&#xff0c;所以學起來比較吃力&#xff0c;而且很多經典的算法理解的不是很透徹解決pta上的問題…

Centos 配置多個虛擬IP

Centos 配置多個虛擬IP 臨時設置 ifconfig enp2s0:3 192.168.3.152 netmask 255.255.255.0 up 復制代碼永久生效 TYPEEthernet BOOTPROTOnone NAMEenp2s0 DEVICEenp2s0 HWADDR40:8d:5c:bc:f4:d8 ONBOOTyes IPADDR0192.168.3.200 PREFIX024 GATEWAY0192.168.3.254 IPADDR1192.16…

[轉]MySQL日志——Undo | Redo

本文是介紹MySQL數據庫InnoDB存儲引擎重做日志漫游 00 – Undo LogUndo Log 是為了實現事務的原子性&#xff0c;在MySQL數據庫InnoDB存儲引擎中&#xff0c;還用Undo Log來實現多版本并發控制(簡稱&#xff1a;MVCC)。 - 事務的原子性(Atomicity) 事務中的所有操作&#xff0…

Vim操作指南

vim具有6種基本模式和5種派生模式。 基本模式 普通模式 插入模式 可視模式 選擇模式 命令行模式 Ex模式 派生模式 操作符等待模式 插入普通模式 插入可視模式 插入選擇模式 替換模式 1.移動光標&#xff08;普通模式下&#xff09; h&#xff1a;左 j&#xff1a;下 …

[DP/單調隊列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 購買飼料

首先我想吐槽的是題目并沒有表明數據范圍。。。 這個題目 DP方程并不難表示。 dp[i][j]表示前i個地點攜帶了j個貨物的最小花費 dp[i][j] dp[i-1][k] (j-k) * cost j*j*(leng[i]-leng[i-1]) 如果你這樣直接提交上去&#xff0c;恭喜你超時&#xff01;&#xff01;&#xff0…

十天沖刺09

今天&#xff0c;和小伙伴在做密保功能的開發&#xff0c;而且通過密保可以找回用戶密碼。轉載于:https://www.cnblogs.com/Excusezuo/p/10923690.html

hdu 6168 Numbers

zk has n numbers a1,a2,...,an. For each (i,j) satisfying 1≤i<j≤n, zk generates a new number (aiaj). These new numbers could make up a new sequence b1&#xff0c;b2,...,bn(n?1)/2 . LsF wants to make some trouble. While zk is sleeping, Lsf mixed up seq…

039_MySQL_多表查詢

#創建部門 CREATE TABLE IF NOT EXISTS dept (did int not null auto_increment PRIMARY KEY,dname VARCHAR(50) not null COMMENT 部門名稱 )ENGINEINNODB DEFAULT charset utf8;#添加部門數據 INSERT INTO dept VALUES (1, 教學部); INSERT INTO dept VALUES (2, 銷售部); IN…

sqlserver 創建對某個存儲過程執行情況的跟蹤

有時候需要抓取執行存儲過程時某個參數的值&#xff0c;有時候程序調用存儲過程執行后結果不太對&#xff0c;不確定是程序的問題還是存儲過程的問題&#xff0c;需要單獨執行存儲過程看結果 即可用下面的方法 -- --創建對某個存儲過程的執行情況的跟蹤 --注意修改路徑 和 obje…

5.7 彈性盒子

彈性盒子定義彈性盒子 display&#xff1a;flex定義子元素排列方式 flex-diection定義子元素換行方式 flxe-wrap定義子元素對齊方式橫向對齊 justify-content縱向對齊 align-items 媒體查詢 media screen and (max-width:最大寬度)and &#xff08;min-width&#xff1a;最小…

4.navicat11激活教程,親測可用哦!

原文地址&#xff1a;http://blog.csdn.net/sanbingyutuoniao123/article/details/52589678Navicat是一款數據庫管理工具, 用于簡化, 開發和管理MySQL, SQL Server, SQLite, Oracle 和 PostgreSQL 的數據庫&#xff1b;Navicat數據模型工具以圖形化方式創建關聯式數據庫&#x…

漢諾塔問題深度剖析(python實現)

當我們學習一門編程語言的時候&#xff0c;都會遇到遞歸函數這個問題。而學習遞歸的一個經典案例就是漢諾塔問題。通過這篇文章&#xff0c;觀察移動三個盤子和四個盤子的詳細過程&#xff0c;您不僅可以深刻的了解遞歸&#xff0c;也更加熟悉了漢諾塔的游戲的玩法。 更好的閱讀…

iOS-QQ臨時對話、QQ群申請跳轉

QQ 臨時對話 NSString *qq [NSString stringWithFormat:"mqq://im/chat?chat_typewpa&uin%&&version1&src_typeweb","這是是QQ號碼"];NSURL *urlQQ [NSURL URLWithString:qq];[[UIApplication sharedApplication] openURL:urlQQ]; QQ 申…

[luoguP2331] [SCOI2005]最大子矩陣(DP)

傳送門 orz不會做。。。 一個好理解的做法&#xff08;n^3*k&#xff09;&#xff1a; 分n1和n2兩種情況考慮。 n1時&#xff0c;預處理出前綴和sum[]。 設f[i][j]為到達第i格&#xff0c;已經放了j個子矩陣的最大和&#xff0c; 那么每次先把f[i][j]的值設為f[i-1][j]&#xf…

想要去阿里面試?你必須得跨過 JVM 這道坎!

概述 很多人想要到阿里巴巴、美團、京東等互聯網大公司去面試&#xff0c;但是現在互聯網大廠面試一般都必定會考核JVM相關的知識積累和實踐經驗&#xff0c;畢竟線上系統寫好代碼部署之后&#xff0c;每個工程師都必須關注JVM相關的東西&#xff0c;比如OOM、GC等問題. 所以一…

醫學知識圖譜一

大綱 知識自動提取技術 醫學知識融合 醫學知識推理 轉載于:https://www.cnblogs.com/quietwalk/p/9000950.html