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)銷(xiāo)
當(dāng)CPU從執(zhí)行一個(gè)線程切換到執(zhí)行另外一個(gè)線程的時(shí)候,它需要先存儲(chǔ)當(dāng)前線程的本地的數(shù)據(jù),程序指針等,然后載入另一個(gè)線程的本地?cái)?shù)據(jù),程序指針等,最后才開(kāi)始執(zhí)行。這種切換稱(chēng)為“上下文切換”(“context switch”)。CPU會(huì)在一個(gè)上下文中執(zhí)行一個(gè)線程,然后切換到另外一個(gè)上下文中執(zhí)行另外一個(gè)線程。上下文切換并不廉價(jià)。如果沒(méi)有必要,應(yīng)該減少上下文切換的發(fā)生。
定義和啟動(dòng)線程主要有兩個(gè)關(guān)鍵技術(shù):
第一:線程類(lèi)必須實(shí)現(xiàn)java.lang.Runnable接口或者繼承java.lang.Thread類(lèi),并且都要實(shí)現(xiàn)run方法,其中run方法沒(méi)有輸入,沒(méi)有輸出,也無(wú)異常。
第二:調(diào)用Thread類(lèi)的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類(lèi)示例分享
- 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多線程程序編寫(xiě)的要點(diǎn)
相關(guān)文章
Windows10下的超詳細(xì)Java安裝全過(guò)程
文章主要介紹了如何在Windows?10系統(tǒng)下安裝Java開(kāi)發(fā)工具包(JDK),包括Java的下載與安裝步驟以及Java環(huán)境的配置方法,最后通過(guò)命令行驗(yàn)證Java環(huán)境是否配置成功2025-01-01
Gradle環(huán)境下導(dǎo)出Swagger為PDF的步驟詳解
這篇文章主要介紹了Gradle環(huán)境下導(dǎo)出Swagger為PDF的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Spring Boot 應(yīng)用程序中配置使用consul的方法
配置是 Spring Boot 應(yīng)用程序中的一部分,主要用于配置服務(wù)端口、應(yīng)用名稱(chēng)、Consul 服務(wù)發(fā)現(xiàn)以及健康檢查等功能,下面給大家介紹Spring Boot 應(yīng)用程序中配置使用consul,感興趣的朋友一起看看吧2025-04-04
spring boot aop 記錄方法執(zhí)行時(shí)間代碼示例
這篇文章主要介紹了spring boot aop 記錄方法執(zhí)行時(shí)間代碼示例,分享了相關(guān)代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
新手學(xué)習(xí)JQuery基本操作和使用案例解析
這篇文章主要介紹了新手學(xué)習(xí)JQuery基本操作和使用案例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
SpringBoot下載文件的實(shí)現(xiàn)及速度對(duì)比
這篇文章主要介紹了SpringBoot下載文件的實(shí)現(xiàn)及速度對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot config 攔截器使用方法實(shí)例詳解
本文介紹Spring-Boot中使用攔截器的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05

