Java多執行緒---超詳細總結
寫在前面的話:此文只能說是java多執行緒的一個入門,其實Java裡頭執行緒完全可以寫一本書了,但是如果最基本的你都學掌握好,又怎麼能更上一個臺階呢?如果你覺得此文很簡單,那推薦你看看Java併發包的的執行緒池(Java併發程式設計與技術內幕:執行緒池深入理解),或者看這個專欄:Java併發程式設計與技術內幕。你將會對Java裡頭的高併發場景下的執行緒有更加深刻的理解。
本文主要講了java中多執行緒的使用方法、執行緒同步、執行緒資料傳遞、執行緒狀態及相應的一些執行緒函式用法、概述等。在這之前,首先讓我們來了解下在作業系統中程序和執行緒的區別:
程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的開銷,一個程序包含1--n個執行緒。(程序是資源分配的最小單位)
執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的執行棧和程式計數器(PC),執行緒切換開銷小。(執行緒是cpu排程的最小單位)
執行緒和程序一樣分為五個階段:建立、就緒、執行、阻塞、終止。
多程序是指作業系統能同時執行多個任務(程式)。
多執行緒是指在同一程式中有多個順序流在執行。
在java中要想實現多執行緒,有兩種手段,一種是繼續Thread類,另外一種是實現Runable介面.(其實準確來講,應該有三種,還有一種是實現Callable介面
一、擴充套件java.lang.Thread類
這裡繼承Thread類的方法是比較常用的一種,如果說你只是想起一條執行緒。沒有什麼其它特殊的要求,那麼可以使用Thread.(筆者推薦使用Runable,後頭會說明為什麼)。下面來看一個簡單的例項
- package com.multithread.learning;
- /**
- *@functon 多執行緒學習
-
*@author 林炳文
- *@time 2015.3.9
- */
- class Thread1 extends Thread{
- private String name;
- public Thread1(String name) {
- this.name=name;
- }
- publicvoid run() {
- for (int i = 0; i < 5; i++) {
- System.out.println(name + "執行 : " + i);
- try {
- sleep((int) Math.random() * 10);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- publicclass Main {
- publicstaticvoid main(String[] args) {
- Thread1 mTh1=new Thread1("A");
- Thread1 mTh2=new Thread1("B");
- mTh1.start();
- mTh2.start();
- }
- }
A執行 : 0
B執行 : 0
A執行 : 1
A執行 : 2
A執行 : 3
A執行 : 4
B執行 : 1
B執行 : 2
B執行 : 3
B執行 : 4
再執行一下:
A執行 : 0B執行 : 0
B執行 : 1
B執行 : 2
B執行 : 3
B執行 : 4
A執行 : 1
A執行 : 2
A執行 : 3
A執行 : 4
說明: 程式啟動執行main時候,java虛擬機器啟動一個程序,主執行緒main在main()呼叫時候被建立。隨著呼叫MitiSay的兩個物件的start方法,另外兩個執行緒也啟動了,這樣,整個應用就在多執行緒下執行。 注意:start()方法的呼叫後並不是立即執行多執行緒程式碼,而是使得該執行緒變為可執行態(Runnable),什麼時候執行是由作業系統決定的。 從程式執行的結果可以發現,多執行緒程式是亂序執行。因此,只有亂序執行的程式碼才有必要設計為多執行緒。 Thread.sleep()方法呼叫目的是不讓當前執行緒獨自霸佔該程序所獲取的CPU資源,以留出一定時間給其他執行緒執行的機會。 實際上所有的多執行緒程式碼執行順序都是不確定的,每次執行的結果都是隨機的。
但是start方法重複呼叫的話,會出現java.lang.IllegalThreadStateException異常。
- Thread1 mTh1=new Thread1("A");
- Thread1 mTh2=mTh1;
- mTh1.start();
- mTh2.start();
輸出:
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at com.multithread.learning.Main.main(Main.java:31)
A執行 : 0
A執行 : 1
A執行 : 2
A執行 : 3
A執行 : 4
二、實現java.lang.Runnable介面
採用Runnable也是非常常見的一種,我們只需要重寫run方法即可。下面也來看個例項。
- /**
- *@functon 多執行緒學習
- *@author 林炳文
- *@time 2015.3.9
- */
- package com.multithread.runnable;
- class Thread2 implements Runnable{
- private String name;
- public Thread2(String name) {
- this.name=name;
- }
- @Override
- publicvoid run() {
- for (int i = 0; i < 5; i++) {
- System.out.println(name + "執行 : " + i);
- try {
- Thread.sleep((int) Math.random() * 10);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- publicclass Main {
- publicstaticvoid main(String[] args) {
- new Thread(new Thread2("C")).start();
- new Thread(new Thread2("D")).start();
- }
- }
C執行 : 0
D執行 : 0
D執行 : 1
C執行 : 1
D執行 : 2
C執行 : 2
D執行 : 3
C執行 : 3
D執行 : 4
C執行 : 4
三、Thread和Runnable的區別
如果一個類繼承Thread,則不適合資源共享。但是如果實現了Runable介面的話,則很容易的實現資源共享。
總結:
實現Runnable介面比繼承Thread類所具有的優勢:
1):適合多個相同的程式程式碼的執行緒去處理同一個資源
2):可以避免java中的單繼承的限制
3):增加程式的健壯性,程式碼可以被多個執行緒共享,程式碼和資料獨立
4):執行緒池只能放入實現Runable或callable類執行緒,不能直接放入繼承Thread的類
提醒一下大家:main方法其實也是一個執行緒。在java中所以的執行緒都是同時啟動的,至於什麼時候,哪個先執行,完全看誰先得到CPU的資源。
在java中,每次程式執行至少啟動2個執行緒。一個是main
寫在前面的話:此文只能說是java多執行緒的一個入門,其實Java裡頭執行緒完全可以寫一本書了,但是如果最基本的你都學掌握好,又怎麼能更上一個臺階呢?如果你覺得此文很簡單,那推薦你看看Java併發包的的執行緒池(Java併發程式設計與技術內幕:執行
join()方法的用法:
join()是主執行緒 等待子執行緒的終止。也就是在子執行緒呼叫了 join() 方法後面的程式碼,只有等到子執行緒結束了才能執行。
例子如下:
Java程式碼
p
在Java中每個執行緒都屬於某個執行緒組(ThreadGroup)。例如,如果在main()中產生一個執行緒,則這個執行緒屬於main執行緒組管理的一員,您可以使用下面的指令來獲得目前執行緒所屬的執行緒組名稱:
Java程式碼
##1、概念 執行緒是jvm排程的最小單元,也叫做輕量級程序,程序是由執行緒組成,執行緒擁有私有的程式技術器以及棧,並且能夠訪問堆中的共享資源。這裡提出一個問題,為什麼要用多執行緒?有一下幾點,首先,隨著cpu核心數的增加,計算機硬
Java多執行緒程式設計詳細解析 一、理解多執行緒多執行緒是這樣一種機制,它允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。執行緒又稱為輕量級程序,它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <winsock2.h>
#include <win
原文作者:aircraft
原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html
先講Linux下(windows下在後面可以直接跳到後面看):
一.執行緒基本概念
前面我們講過多程序伺服器,但我們知道它開銷很大
(尊重勞動成果,轉載請註明出處:https://blog.csdn.net/qq_25827845/article/details/84894463冷血之心的部落格)
系列文章:
Java多執行緒程式設計學習總結(一)
Java多執行緒程式設計學習總結(二)
前
定義篇
程序(Process)和執行緒(Thread)
怎樣實現多工處理(Multitasking)?
多工處理是同時執行多個任務的過程。我們使用多工處理來利用 CPU。可通過兩種方式實現多工處理:
· 基於程序的多工 (多重處理)
· 基於執行緒的多工處理
看這片文章之前,請問讀者有沒有對高併發以及concurrent工具包(jdk1.5推出)有一個初略的認識,以及有沒有編碼實戰經驗?
1、多執行緒有什麼用?
一個可能在很多人看來很扯淡的一個問題:我會用多執行緒就好了,還管它有什麼用?在我看來,這個回答更扯淡。所謂"知其然 ### 一、基本概念
**程式(program)**: 是為完成特定任務、用某種語言編寫的一組指令的集合。即指一 段靜態的程式碼,靜態物件。
**程序(process)**:是程式的一次執行過程,或是正在執行的一個程式。是一個動態 的過程:有它自身的產生、存在和消亡的過程。——生命週期
- 執行中的
平時專案中多執行緒的應用比較少,今天網上找了找相關的內容學習了下。看到下面的文章感覺比較好。
轉自:http://www.cnblogs.com/1020182600HENG/p/5939933.html
目錄
一擴充套件javalangThread類
二實現javalan
一、sleep()方法、wait()方法、yeild()方法、interrupt()方法、notify()、notifyAll()方法
1、sleep()方法:
sleep方法為Thread的靜態方法;
sleep方法的作用是讓執行緒休眠指定時間,在時間到
寫在前面的話:此文只能說是java多執行緒的一個入門,其實Java裡頭執行緒完全可以寫一本書了,但是如果最基本的你都學掌握好,又怎麼能更上一個臺階呢?如果你覺得此文很簡單,那推薦你看看Java併發包的的執行緒池(Java併發程式設計與技術內幕:執行緒池深入理解
多執行緒的使用
首先講一下程序和執行緒的區別:
程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的開銷,一個程序包含1--n個執行緒。
執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的執行棧和程式計數器(PC),執行緒切換開銷小。
目錄(?)[-]
本文主要講了java中多執行緒的使用方法、執行緒同步、執行緒資料傳遞、執行緒狀態及相應的一些執行緒函式用法、概述等。
首先講一下程序和執行緒的區別:
程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換會有較大的
1、什麼是多執行緒?
一個程序可以開啟多個執行緒,每個執行緒可以併發/並行執行不同任務。
2、Java多執行緒實現方式
2.1、繼承Thread類
2.2、實現Runnable介面方式實現多執行緒
2.3、使
來自:https://blog.csdn.net/qq_34996727/article/details/80416277或者https://www.cnblogs.com/pureEve/p/6524366.html
一.相關知識:
Java多執行緒程式設計到的知識:
目錄
練題1:編寫程式實現,子執行緒迴圈3次,接著主執行緒迴圈5次,接著再子執行緒迴圈3次,主執行緒迴圈5次,如此反覆,迴圈3次.
練習題2:設計四個執行緒,其中兩個執行緒每次對變數i加1,另外兩個執行緒每次對i減1.
練習題3:自己編寫程式碼,實現生產者-消費者模
自己學習總結了一些思維導圖(持續更新中),後面附有GitHub連結 ,分享給大家。https://github.com/panjianlong13/MindMapSummary
&n 相關推薦
Java多執行緒---超詳細總結
Java多執行緒學習與總結(Join)
Java多執行緒學習與總結(ThreadGroup)
java多執行緒程式設計詳細入門教程
Java多執行緒程式設計詳細解析
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
Java多執行緒程式設計學習總結(二)
Java 多執行緒程式設計學習總結(一)
JAVA多執行緒常見問題總結
Java多執行緒詳解總結
Java多執行緒學習---------超詳細總結(java 多執行緒 同步 資料傳遞 )
Java多執行緒面試知識點彙總(超詳細總結)
Java多執行緒學習(吐血超詳細總結)
多執行緒的使用,Java多執行緒學習(吐血超詳細總結)
Java多執行緒學習(超詳細總結)
總結-Java多執行緒與高併發簡記
java基礎總結(三十二)--java多執行緒程式設計例項
java多執行緒--練習題總結
Java多執行緒思維導圖總結