欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java并發(fā)編程實(shí)例分析

 更新時(shí)間:2019年03月01日 10:33:05   投稿:laozhang  
在本文里我們給大家分享了關(guān)于java并發(fā)編程實(shí)例分析以及相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。

java并發(fā)編程是java程序設(shè)計(jì)語(yǔ)言的一塊重點(diǎn),在大部分的業(yè)務(wù)場(chǎng)景中都需要并發(fā)編程。

比如:并發(fā)的去處理http請(qǐng)求,這樣就可以使得一臺(tái)機(jī)器同時(shí)處理多個(gè)請(qǐng)求,大大提高業(yè)務(wù)的響應(yīng)效率,從而使用用戶體驗(yàn)更加流暢。

java如何并發(fā)編程,要注意以下幾個(gè)方面:

1、java語(yǔ)言中的多線程操作:創(chuàng)建和啟動(dòng)線程的幾種方式。

2、共享變量的同步問(wèn)題,要保證線程安全,辨別哪些變量是線程安全的、那些變量是線程不安全的,對(duì)于不安全的變量我們要想辦法讓其同步,一般也就是加鎖。

3、線程鎖:包括方法鎖和synchronized塊的使用。

接下來(lái)就詳細(xì)說(shuō)一下這幾個(gè)方面。

首先說(shuō)創(chuàng)建線程的方式:一般有兩種方式

定義一個(gè)線程類:實(shí)現(xiàn)Runnable接口、或者繼承Thread,推薦是實(shí)現(xiàn)接口的方式。

啟動(dòng)線程的方式:

第一種:new Thread()的方式。

創(chuàng)建好的線程,然后通過(guò)new的方式啟動(dòng)線程,因?yàn)閯?chuàng)建方式的不同,他們啟動(dòng)的方式也略微有些差別。

第二種:通過(guò)線程池的方式啟動(dòng)線程。JavaAPI提供了線程池技術(shù),可以用池的原理,

去管理線程,池的技術(shù)在java中很常見(jiàn),比如數(shù)據(jù)庫(kù)連接池等。

具體細(xì)節(jié)可以參考如下的連接:

共享變量的問(wèn)題:要明白什么變量最有可能出現(xiàn)線程安全問(wèn)題。沒(méi)錯(cuò)就是靜態(tài)變量,靜態(tài)變量

相當(dāng)于C語(yǔ)言的全局變量,如果是public類型,誰(shuí)都可以修改,所以這個(gè)時(shí)候就會(huì)出現(xiàn)

變量的線程安全問(wèn)題。當(dāng)然了私有變量也可能出現(xiàn)線程安全問(wèn)題。

具體細(xì)節(jié)可以參考如下的連接:

主要來(lái)說(shuō)一下線程鎖的兩種方式:

(1)首先定義一個(gè)MyBusiness類,此類中頂一個(gè)一個(gè)靜態(tài)變量i,和一個(gè)靜態(tài)方法,靜態(tài)方法的功能是讓i加1。

(2)然后定義一個(gè)線程類MyThread2,run方法中先讓線程sleep 2毫秒,然后執(zhí)行加1操作。

(3)定義測(cè)試類,測(cè)試類創(chuàng)建6000個(gè)MyThread2線程,然后sleep 1秒鐘,執(zhí)行輸出,顯示i的值。

(4)結(jié)果:從結(jié)果可以看出,此時(shí)出現(xiàn)了線程安全問(wèn)題,就是說(shuō)某些線程在加1操作時(shí)取到了臟數(shù)據(jù),即

在某一個(gè)時(shí)間點(diǎn),多個(gè)線程同時(shí)取到了某個(gè)相同的i值,然后去修改,結(jié)果導(dǎo)致在這幾個(gè)線程中,只有最后一個(gè)

修改生效,而其他的則被覆蓋掉了。

(5)解決方案一:方法鎖,給add方法加鎖,表示同一時(shí)間只能有一個(gè)方法的調(diào)用被允許運(yùn)行,其他的線程等待鎖的釋放。

再次運(yùn)行,發(fā)現(xiàn)變成了6000就是正確的了。

(6)解決方案二:synchronized代碼塊,我們重新定義一個(gè)方法add1,然后用synchronized代碼塊鎖上MyBusiness類,

表示同一時(shí)間只能有一個(gè)線程操作MyBusiness類,其他線程必須等待鎖的釋放。

(7)查看結(jié)果,也得到了正確的輸出。

相關(guān)文章

  • springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解

    springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解

    這篇文章主要介紹了springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java map存放數(shù)組并取出值代碼詳解

    Java map存放數(shù)組并取出值代碼詳解

    這篇文章主要介紹了Java map存放數(shù)組并取出值代碼詳解的相關(guān)內(nèi)容,小編覺(jué)得挺不錯(cuò)的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • 詳解MyBatis的動(dòng)態(tài)SQL實(shí)現(xiàn)原理

    詳解MyBatis的動(dòng)態(tài)SQL實(shí)現(xiàn)原理

    MyBatis提供了強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句生成功能,以應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景,本篇文章將結(jié)合MyBatis解析SQL語(yǔ)句的過(guò)程對(duì)MyBatis中對(duì)<if>,<where>,<foreach>等動(dòng)態(tài)SQL標(biāo)簽的支持進(jìn)行分析,需要的朋友可以參考下
    2023-07-07
  • Spring切面優(yōu)先級(jí)與基于xml的AOP實(shí)現(xiàn)方法詳解

    Spring切面優(yōu)先級(jí)與基于xml的AOP實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Spring切面的優(yōu)先級(jí)與基于xml的AOP的詳細(xì)步驟,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • 淺析Java中局部變量與成員變量同名解決技巧

    淺析Java中局部變量與成員變量同名解決技巧

    在剛開(kāi)始學(xué)習(xí)Java的時(shí)候,就了解了Java基礎(chǔ)中的變量,雖然知道這個(gè)以后會(huì)經(jīng)常用到,但沒(méi)想到了基本語(yǔ)法這里,竟然又冒出來(lái)了成員變量和局部變量。變來(lái)變?nèi)ヌ菀鬃屓烁銜灹耍裉煳覀兙吞魭鰜?lái)梳理一下!
    2016-07-07
  • Java was started but returned exit code=13問(wèn)題解決案例詳解

    Java was started but returned exit code=13問(wèn)題解決案例詳解

    這篇文章主要介紹了Java was started but returned exit code=13問(wèn)題解決案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • JavaWeb實(shí)現(xiàn)壓縮多個(gè)文件并下載實(shí)例詳解

    JavaWeb實(shí)現(xiàn)壓縮多個(gè)文件并下載實(shí)例詳解

    本文通過(guò)實(shí)例代碼給大家講解了javaweb實(shí)現(xiàn)壓縮多個(gè)文件并下載功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-07-07
  • win10安裝rabbitMQ的詳細(xì)步驟

    win10安裝rabbitMQ的詳細(xì)步驟

    RabbitMQ是一個(gè)開(kāi)源的消息中間件(Message Broker),它基于AMQP協(xié)議設(shè)計(jì),用于在分布式系統(tǒng)中實(shí)現(xiàn)消息的高效、可靠傳輸,本文給打擊介紹了win10安裝rabbitMQ的詳細(xì)步驟,文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • RabbitMQ進(jìn)階之消息可靠性詳解

    RabbitMQ進(jìn)階之消息可靠性詳解

    這篇文章主要介紹了RabbitMQ進(jìn)階之消息可靠性詳解,abbitmq消息的投遞過(guò)程中,怎么確保消息能不丟失,這是一個(gè)很重要的問(wèn)題,哪怕我們做了Rabbitmq持久化,也不能保證我們的業(yè)務(wù)消息不會(huì)被丟失,需要的朋友可以參考下
    2023-08-08
  • SpringBoot使用統(tǒng)一異常處理詳解

    SpringBoot使用統(tǒng)一異常處理詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用統(tǒng)一異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評(píng)論