Java多線程實(shí)例
在上篇文章給大家介紹了java多線程的實(shí)現(xiàn)方式,通過(guò)本文給大家介紹java多線程實(shí)例,對(duì)java多線程感興趣的朋友一起學(xué)習(xí)吧
首先給大家說(shuō)下多線程的優(yōu)缺點(diǎn)
多線程的優(yōu)點(diǎn):
1)資源利用率更好
2)程序設(shè)計(jì)在某些情況下更簡(jiǎn)單
3)程序響應(yīng)更快
多線程的代價(jià):
1)設(shè)計(jì)更復(fù)雜
雖然有一些多線程應(yīng)用程序比單線程的應(yīng)用程序要簡(jiǎn)單,但其他的一般都更復(fù)雜。在多線程訪問(wèn)共享數(shù)據(jù)的時(shí)候,這部分代碼需要特別的注意。線程之間的交互往往非常復(fù)雜。不正確的線程同步產(chǎn)生的錯(cuò)誤非常難以被發(fā)現(xiàn),并且重現(xiàn)以修復(fù)。
2)上下文切換的開(kāi)銷
當(dāng)CPU從執(zhí)行一個(gè)線程切換到執(zhí)行另外一個(gè)線程的時(shí)候,它需要先存儲(chǔ)當(dāng)前線程的本地的數(shù)據(jù),程序指針等,然后載入另一個(gè)線程的本地?cái)?shù)據(jù),程序指針等,最后才開(kāi)始執(zhí)行。這種切換稱為“上下文切換”(“context switch”)。CPU會(huì)在一個(gè)上下文中執(zhí)行一個(gè)線程,然后切換到另外一個(gè)上下文中執(zhí)行另外一個(gè)線程。上下文切換并不廉價(jià)。如果沒(méi)有必要,應(yīng)該減少上下文切換的發(fā)生。
定義和啟動(dòng)線程主要有兩個(gè)關(guān)鍵技術(shù):
第一:線程類必須實(shí)現(xiàn)java.lang.Runnable接口或者繼承java.lang.Thread類,并且都要實(shí)現(xiàn)run方法,其中run方法沒(méi)有輸入,沒(méi)有輸出,也無(wú)異常。
第二:調(diào)用Thread類的start方法啟動(dòng)線程,當(dāng)獲得cpu資源后,start方法自動(dòng)調(diào)用線程run方法開(kāi)始運(yùn)行。
package test; import java.util.Vector; import java.util.Date; /** * 線程測(cè)試實(shí)例 * @author 靜止的流水 * */ public class Threadnew { /** * * @author 靜止的流水 * */ class ThreadA extends Thread { private Date runtime; public void run() { System.out.println("ThreadA begin."); this.runtime = new Date(); System.out.println("ThreadA end."); } } /** * * @author 靜止的流水 * */ class ThreadB implements Runnable { private Date runtime; public void run() { System.out.println("ThreadB begin."); this.runtime = new Date(); System.out.println("ThreadB end."); } } /** * * */ public void starta() { Thread threada = new ThreadA(); threada.start(); } /** * * */ public void startb() { Runnable threadb = new ThreadB(); Thread thread = new Thread(threadb); thread.start(); } /** * * @param args */ public static void main(String[] args) { Threadnew test = new Threadnew(); test.starta(); test.startb(); } }
- java多線程Future和Callable類示例分享
- Java 多線程synchronized關(guān)鍵字詳解(六)
- java多線程下載實(shí)例詳解
- 分享40個(gè)Java多線程問(wèn)題小結(jié)
- Java多線程編程中的兩種常用并發(fā)容器講解
- java多線程編程之Synchronized塊同步方法
- 舉例解析Java多線程編程中需要注意的一些關(guān)鍵點(diǎn)
- java多線程編程制作電子時(shí)鐘
- Java多線程的實(shí)現(xiàn)方式比較(兩種方式比較)
- 舉例講解Java中的多線程編程
- 五種Java多線程同步的方法
- 整理總結(jié)Java多線程程序編寫的要點(diǎn)
相關(guān)文章
詳解SpringBoot中Controller接收對(duì)象列表實(shí)現(xiàn)
這篇文章主要介紹了詳解SpringBoot中Controller接收對(duì)象列表實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05redis實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)同步工具代碼分享
這篇文章主要介紹了使用redis實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)同步工具的代碼,大家參考使用吧2014-01-01詳解Spring Boot 項(xiàng)目中的 parent
這篇文章主要介紹了Spring Boot中parent作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04java中加密的實(shí)現(xiàn)方法(MD5,MD2,SHA)
這篇文章主要介紹了java中加密的實(shí)現(xiàn)方法(MD5,MD2,SHA)的相關(guān)資料,這里提供三種實(shí)現(xiàn)加密的方法,大家可以對(duì)比一下,需要的朋友可以參考下2017-08-08在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說(shuō)明
這篇文章主要介紹了在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(39)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07SpringBoot 開(kāi)發(fā)提速神器 Lombok+MybatisPlus+SwaggerUI
這篇文章主要介紹了SpringBoot 開(kāi)發(fā)提速神器 Lombok+MybatisPlus+SwaggerUI,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03