国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件

這篇具有很好參考價(jià)值的文章主要介紹了Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引出


1.大量請(qǐng)求擁擠搶購(gòu)中的數(shù)據(jù)不安全問(wèn)題;
2.事務(wù)ACID:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持久性(Durability);
3.線程安全特征:原子性(Atomicity)可見(jiàn)性(Visibility)有序性(Ordering);
4.java中的鎖初步,synchronize鎖和ReentrantLock鎖使用初步;
5.濫用鎖的問(wèn)題,以及產(chǎn)生死鎖的條件;

場(chǎng)景:大量請(qǐng)求擁擠搶購(gòu)

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

package com.tianju.redis.service.impl;

import com.tianju.redis.service.IRushGoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RushGoodsServiceImpl implements IRushGoodsService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private final String GOODS = "goods";

    @Override
    public String rush() {
        String sNum = stringRedisTemplate.opsForValue().get(GOODS);
        int nums = Integer.parseInt(sNum);
        if (nums>0){
            stringRedisTemplate.opsForValue().set(GOODS, String.valueOf(--nums) );
            return stringRedisTemplate.opsForValue().get(GOODS);
        }else {
            return "error";
        }
    }
}
    @PutMapping("/rushJmeter")
    public void rushJmeter(){
        String goodsNum = rushGoodsService.rush();
        System.out.println("goodsNum: "+goodsNum);
    }

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

事務(wù)的基本特征ACID

事務(wù)是指一組操作被視為一個(gè)不可分割的工作單元,要么全部執(zhí)行成功,要么全部不執(zhí)行。事務(wù)具有以下四個(gè)基本特征,通常被稱為ACID特性:

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

  • 原子性(Atomicity):事務(wù)是一個(gè)原子操作,要么全部執(zhí)行成功,要么全部不執(zhí)行。如果事務(wù)中的任何一個(gè)操作失敗,整個(gè)事務(wù)將被回滾到初始狀態(tài),不會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生任何影響。

  • 一致性(Consistency):事務(wù)在執(zhí)行前和執(zhí)行后,數(shù)據(jù)庫(kù)的狀態(tài)必須保持一致。這意味著事務(wù)中的操作必須滿足數(shù)據(jù)庫(kù)的完整性約束,包括唯一性約束、外鍵約束等。

  • 隔離性(Isolation):事務(wù)的執(zhí)行是相互隔離的,一個(gè)事務(wù)的操作不會(huì)被其他事務(wù)所干擾。隔離性確保了并發(fā)執(zhí)行的事務(wù)之間不會(huì)產(chǎn)生不一致的結(jié)果。

  • 持久性(Durability):一旦事務(wù)提交成功,其所做的修改將永久保存在數(shù)據(jù)庫(kù)中,即使系統(tǒng)發(fā)生故障或重啟,修改的結(jié)果也不會(huì)丟失。

這些特性確保了事務(wù)的可靠性和一致性。數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)使用日志和鎖等機(jī)制來(lái)實(shí)現(xiàn)事務(wù)的特性。在設(shè)計(jì)和實(shí)現(xiàn)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),需要考慮事務(wù)的邊界和正確使用事務(wù)來(lái)保證數(shù)據(jù)的完整性和一致性

線程安全的基本特征

線程安全是指在多線程環(huán)境下,對(duì)共享資源的訪問(wèn)和操作不會(huì)導(dǎo)致數(shù)據(jù)不一致或產(chǎn)生不可預(yù)期的結(jié)果。線程安全的基本特征包括:

  • 原子性(Atomicity):對(duì)共享資源的操作要么全部執(zhí)行成功,要么全部不執(zhí)行,不存在中間狀態(tài)。即使在多線程環(huán)境下,也能保證操作的完整性。簡(jiǎn)單說(shuō)就是相關(guān)操作不會(huì)中途被其他線程干擾,一般通過(guò)同步機(jī)制實(shí)現(xiàn)

  • 可見(jiàn)性(Visibility):一個(gè)線程對(duì)共享資源的修改對(duì)其他線程是可見(jiàn)的。當(dāng)一個(gè)線程修改了共享資源的值后,其他線程能夠立即看到最新的值??梢?jiàn)性,是一個(gè)線程修改了某個(gè)共享變量,其狀態(tài)能夠立即被其他線程知曉,通常被解釋為將線程本地狀態(tài)反映到主內(nèi)存上,volatile就是負(fù)責(zé)保證可見(jiàn)性的。

  • 有序性(Ordering):線程的執(zhí)行順序與程序的代碼順序一致。即使在多線程環(huán)境下,也能保證操作按照預(yù)期的順序執(zhí)行。是保證線程內(nèi)串行語(yǔ)義,避免指令重排等。

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言
解決辦法

  • 使用互斥鎖(Mutex)或信號(hào)量(Semaphore)等同步機(jī)制,確保在同一時(shí)間只有一個(gè)線程能夠訪問(wèn)共享資源。

  • 使用原子操作(Atomic Operation)來(lái)保證對(duì)共享資源的操作是原子的,不會(huì)被其他線程中斷。

  • 使用volatile關(guān)鍵字來(lái)保證共享變量的可見(jiàn)性,確保一個(gè)線程對(duì)共享變量的修改對(duì)其他線程是可見(jiàn)的。

  • 使用線程安全的數(shù)據(jù)結(jié)構(gòu)或類,這些數(shù)據(jù)結(jié)構(gòu)或類已經(jīng)在設(shè)計(jì)上考慮了多線程環(huán)境下的安全性。

加鎖(java)

synchronized鎖

可重入鎖: sychronized ReentrantLock

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

synchronized (this.getClass()){}

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

ReentrantLock鎖

private final ReentrantLock lock = new ReentrantLock(); // 可重入鎖

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

什么是可重入鎖?

當(dāng)線程獲取某個(gè)鎖后,還可以繼續(xù)獲取它,可以遞歸調(diào)用,而不會(huì)發(fā)生死鎖;

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

如何保證可重入

當(dāng)一個(gè)線程訪問(wèn)同步塊并獲取鎖時(shí),會(huì)在對(duì)象頭和棧幀中的鎖記錄里存儲(chǔ)偏向的線程ID,以后該線程在進(jìn)入和退出同步塊時(shí)不需要進(jìn)行CAS操作來(lái)加鎖和解鎖,只需簡(jiǎn)單測(cè)試一下對(duì)象頭的Mark Word里是否存儲(chǔ)著指向當(dāng)前線程的偏向鎖。

如果測(cè)試成功,表示線程已經(jīng)獲得了鎖。
如果測(cè)試失敗,則需要再測(cè)試一下Mark Word中偏向鎖標(biāo)志是否設(shè)置成1:沒(méi)有則CAS競(jìng)爭(zhēng);設(shè)置了,則CAS將對(duì)象頭偏向鎖指向當(dāng)前線程。再維護(hù)一個(gè)計(jì)數(shù)器,同個(gè)線程進(jìn)入則自增1,離開(kāi)再減1,直到為0才能釋放

濫用鎖的代價(jià)?(死鎖)

死鎖的四個(gè)必要條件

循環(huán) A —> B —>C —>A

產(chǎn)生死鎖的必要條件是以下四個(gè)條件同時(shí)滿足:

  • 互斥條件(Mutual Exclusion):至少有一個(gè)資源被一個(gè)進(jìn)程獨(dú)占使用,即在一段時(shí)間內(nèi)只能由一個(gè)進(jìn)程訪問(wèn)。

  • 請(qǐng)求與保持條件(Hold and Wait):一個(gè)進(jìn)程在持有至少一個(gè)資源的同時(shí),又請(qǐng)求獲取其他進(jìn)程持有的資源。

  • 不可剝奪條件(No Preemption):資源只能由持有者顯式地釋放,其他進(jìn)程無(wú)法強(qiáng)制剝奪。

  • 循環(huán)等待條件(Circular Wait):存在一個(gè)進(jìn)程資源的循環(huán)鏈,每個(gè)進(jìn)程都在等待下一個(gè)進(jìn)程所持有的資源。

當(dāng)這四個(gè)條件同時(shí)滿足時(shí),就可能發(fā)生死鎖。如果任何一個(gè)條件不滿足,就不會(huì)發(fā)生死鎖。

死鎖是多線程或多進(jìn)程并發(fā)執(zhí)行時(shí)的一種常見(jiàn)問(wèn)題,它會(huì)導(dǎo)致系統(tǒng)無(wú)法繼續(xù)執(zhí)行下去,需要通過(guò)死鎖檢測(cè)、死鎖預(yù)防、死鎖避免或死鎖解除等方法來(lái)處理。

死鎖的案例

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

可能導(dǎo)致死鎖

Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件,Java,java,安全,開(kāi)發(fā)語(yǔ)言

鎖對(duì)象ObjLock

package com.tianju.redis.lock;

public class ObjLock {
    private String name;

    public ObjLock(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return "ObjLock:"+this.name;
    }
}

加鎖釋放鎖方法DeadLockDemo

package com.tianju.redis.lock;

public class DeadLockDemo {

    private ObjLock a;
    public ObjLock b;

    public DeadLockDemo(ObjLock a,ObjLock b){
        this.a = a;
        this.b = b;
    }

    public void dead(){
        System.out.println("********"+a+"對(duì)象"+b+"對(duì)象都加鎖**************");
        System.out.println(a+"--"+b+": "+"準(zhǔn)備給"+a+"對(duì)象加鎖>>");
        synchronized (a){
            System.out.println(a+"--"+b+": "+a+"對(duì)象加鎖成功...");
            System.out.println(a+"--"+b+": "+"準(zhǔn)備給"+b+"對(duì)象加鎖>>>");
            synchronized (b){
                System.out.println(a+"--"+b+": "+b+"對(duì)象加鎖成功");
            }
            System.out.println(a+"--"+b+": "+"釋放"+b+"對(duì)象的鎖");
        }
        System.out.println(a+"--"+b+": "+"釋放"+b+"對(duì)象的鎖");
        System.out.println("****************");
    }
}

測(cè)試方法

package com.tianju.redis.lock;

public class TestDeadLock {

    /**
     * 一個(gè)一個(gè)順序運(yùn)行
     */
    public static void run(){
        ObjLock a = new ObjLock("A");
        ObjLock b = new ObjLock("B");
        ObjLock c = new ObjLock("C");

        DeadLockDemo lockDemo1 = new DeadLockDemo(a, b);
        lockDemo1.dead(); // 鎖住a和b

        DeadLockDemo lockDemo2 = new DeadLockDemo(b, c);
        lockDemo2.dead(); // 鎖住a和b

        DeadLockDemo lockDemo3 = new DeadLockDemo(c, a);
        lockDemo3.dead(); // 鎖住a和b
    }

    /**
     * 進(jìn)行線程搶,死鎖
     */
    public static void rushRun(){
        ObjLock a = new ObjLock("A");
        ObjLock b = new ObjLock("B");
        ObjLock c = new ObjLock("C");

        new Thread(()->{
            DeadLockDemo lockDemo1 = new DeadLockDemo(a, b);
            lockDemo1.dead(); // 鎖住a和b
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();

        new Thread(()->{
            DeadLockDemo lockDemo2 = new DeadLockDemo(b, c);
            lockDemo2.dead(); // 鎖住a和b
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();

        new Thread(()->{
            DeadLockDemo lockDemo3 = new DeadLockDemo(c, a);
            lockDemo3.dead(); // 鎖住a和b
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();
    }


    public static void main(String[] args) {
//        run(); // 順序執(zhí)行加鎖,解鎖
        rushRun(); // 線程進(jìn)行搶
    }
}


總結(jié)

1.大量請(qǐng)求擁擠搶購(gòu)中的數(shù)據(jù)不安全問(wèn)題;
2.事務(wù)ACID:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持久性(Durability);
3.線程安全特征:原子性(Atomicity)可見(jiàn)性(Visibility)有序性(Ordering);
4.java中的鎖初步,synchronize鎖和ReentrantLock鎖使用初步;
5.濫用鎖的問(wèn)題,以及產(chǎn)生死鎖的條件;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-673771.html

到了這里,關(guān)于Java進(jìn)階(6)——搶購(gòu)問(wèn)題中的數(shù)據(jù)不安全(非原子性問(wèn)題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java 進(jìn)階篇】Redis持久化之RDB:數(shù)據(jù)的安全守護(hù)者

    【Java 進(jìn)階篇】Redis持久化之RDB:數(shù)據(jù)的安全守護(hù)者

    Redis,作為一款高性能的鍵值存儲(chǔ)系統(tǒng),支持多種持久化方式,其中RDB(Redis DataBase)是其最常用的一種。RDB可以將當(dāng)前時(shí)刻的數(shù)據(jù)快照保存到磁盤(pán),以便在Redis重啟時(shí)快速恢復(fù)數(shù)據(jù)。本文將深入探討RDB的原理、配置和實(shí)際應(yīng)用,幫助初學(xué)者更好地理解和使用Redis的持久化機(jī)制

    2024年02月05日
    瀏覽(33)
  • 【多線程進(jìn)階】synchronized 原理

    【多線程進(jìn)階】synchronized 原理

    在前面章節(jié)中, 提到了多線程中的鎖策略, 那么我們 Java 中的鎖 synchronized 背后都采取了哪些鎖策略呢? 又是如何進(jìn)行工作的呢? 本節(jié)我們就來(lái)談一談. 關(guān)注收藏, 開(kāi)始學(xué)習(xí)吧?? 在 Java 中, synchronized 具有以下特性(這里以 JDK 1.8 為例): 開(kāi)始時(shí)是樂(lè)觀鎖, 如果鎖沖突頻繁, 就轉(zhuǎn)換為悲

    2024年02月07日
    瀏覽(28)
  • 【六大鎖策略-各種鎖的對(duì)比-Java中的Synchronized鎖和ReentrantLock鎖的特點(diǎn)分析-以及加鎖的合適時(shí)機(jī)】

    【六大鎖策略-各種鎖的對(duì)比-Java中的Synchronized鎖和ReentrantLock鎖的特點(diǎn)分析-以及加鎖的合適時(shí)機(jī)】

    閱讀該文章之前要了解,鎖策略是為了解決什么問(wèn)題 多線程帶來(lái)的的風(fēng)險(xiǎn)-線程安全的問(wèn)題的簡(jiǎn)單實(shí)例-線程不安全的原因 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 鎖沖突是指兩個(gè)線程對(duì)一個(gè)對(duì)象加鎖,產(chǎn)生了阻塞等待。 樂(lè)觀鎖 假設(shè)數(shù)據(jù)一般情況下不會(huì)產(chǎn)生并發(fā)沖

    2024年02月15日
    瀏覽(25)
  • Java進(jìn)階(3)——手動(dòng)實(shí)現(xiàn)ArrayList & 源碼的初步理解分析 & 數(shù)組插入數(shù)據(jù)和刪除數(shù)據(jù)的問(wèn)題

    Java進(jìn)階(3)——手動(dòng)實(shí)現(xiàn)ArrayList & 源碼的初步理解分析 & 數(shù)組插入數(shù)據(jù)和刪除數(shù)據(jù)的問(wèn)題

    1.ArrayList的結(jié)構(gòu)分析,可迭代接口,是List的實(shí)現(xiàn); 2.數(shù)組增加元素和刪除元素的分析,何時(shí)擴(kuò)容,如何擴(kuò)容; 3.插入數(shù)據(jù)的復(fù)雜度O(N); 4.數(shù)組特點(diǎn):查找和修改容易O(1);增加和刪除復(fù)雜O(N); 增加元素 如果放不下怎么辦?如何擴(kuò)容? 擴(kuò)容后如何操作? 擴(kuò)容:每次為原來(lái)的

    2024年02月12日
    瀏覽(17)
  • 智能建筑中的大數(shù)據(jù)分析:概述,應(yīng)用,安全和隱私問(wèn)題

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 近年來(lái),智能建筑、智慧城市等新興的概念層出不窮,人們對(duì)智能建筑、智慧城市追求的是從根本上解決環(huán)境問(wèn)題、提升社會(huì)生活品質(zhì)、實(shí)現(xiàn)經(jīng)濟(jì)社會(huì)效益的目標(biāo)。智能建筑可謂是國(guó)際化進(jìn)程中最具代表性的新興產(chǎn)業(yè)領(lǐng)域之一。智能建筑即“未

    2024年02月15日
    瀏覽(17)
  • 跨域問(wèn)題未解決:策略未能處理跨域數(shù)據(jù)交換中的安全風(fēng)險(xiǎn)

    跨域問(wèn)題未解決:策略未能處理跨域數(shù)據(jù)交換中的安全風(fēng)險(xiǎn)

    隨著互聯(lián)網(wǎng)的快速發(fā)展,不同組織之間的信息交流和協(xié)作變得越來(lái)越頻繁。在這個(gè)過(guò)程中,安全成為了一個(gè)重要的話題。特別是當(dāng)涉及到跨領(lǐng)域數(shù)據(jù)處理時(shí)(如來(lái)自不同網(wǎng)站、應(yīng)用或云服務(wù)器的數(shù)據(jù)),如何保護(hù)這些數(shù)據(jù)的完整性和安全性顯得尤為重要。然而在實(shí)際情況下,許

    2024年02月02日
    瀏覽(48)
  • 【JavaEE初階】多線程進(jìn)階(五)常見(jiàn)鎖策略 CAS synchronized優(yōu)化原理

    【JavaEE初階】多線程進(jìn)階(五)常見(jiàn)鎖策略 CAS synchronized優(yōu)化原理

    樂(lè)觀鎖:預(yù)測(cè)鎖競(jìng)爭(zhēng)不是很激烈。 悲觀鎖:預(yù)測(cè)鎖競(jìng)爭(zhēng)會(huì)很激烈。 以上定義并不是絕對(duì)的,具體看預(yù)測(cè)鎖競(jìng)爭(zhēng)激烈程度的結(jié)論。 輕量級(jí)鎖加鎖解鎖開(kāi)銷比較小,效率更高。 重量級(jí)鎖加鎖解鎖開(kāi)銷比較大,效率更低。 多數(shù)情況下,樂(lè)觀鎖也是一個(gè)輕量級(jí)鎖。 多數(shù)情況下,悲

    2024年02月03日
    瀏覽(31)
  • Java中的線程池技術(shù)進(jìn)階

    Java中的線程池技術(shù)是用于管理和復(fù)用線程的一種技術(shù),它可以有效地提高應(yīng)用程序的性能和響應(yīng)速度。在Java中,線程池可以通過(guò)java.util.concurrent包中的ExecutorService接口和相關(guān)實(shí)現(xiàn)類來(lái)創(chuàng)建和使用。 以下是一些關(guān)于Java線程池技術(shù)的進(jìn)階知識(shí): 線程池參數(shù)配置: corePoolSize:核

    2024年01月20日
    瀏覽(22)
  • 【javaEE面試題(四)線程不安全的原因】【1. 修改共享數(shù)據(jù) 2. 操作不是原子性 3. 內(nèi)存可見(jiàn)性 4. 代碼順序性】

    【javaEE面試題(四)線程不安全的原因】【1. 修改共享數(shù)據(jù) 2. 操作不是原子性 3. 內(nèi)存可見(jiàn)性 4. 代碼順序性】

    大家觀察下是否適用多線程的現(xiàn)象是否一致?同時(shí)嘗試思考下為什么會(huì)有這樣的現(xiàn)象發(fā)生呢? 原因是 1.load 2. add 3. save 注意:可能會(huì)導(dǎo)致 小于5w 想給出一個(gè)線程安全的確切定義是復(fù)雜的,但我們可以這樣認(rèn)為: 如果多線程環(huán)境下代碼運(yùn)行的結(jié)果是符合我們預(yù)期的,即在單線

    2024年02月13日
    瀏覽(45)
  • Java網(wǎng)絡(luò)爬蟲(chóng)——jsoup快速上手,爬取京東數(shù)據(jù)。同時(shí)解決‘京東安全’防爬問(wèn)題

    Java網(wǎng)絡(luò)爬蟲(chóng)——jsoup快速上手,爬取京東數(shù)據(jù)。同時(shí)解決‘京東安全’防爬問(wèn)題

    網(wǎng)絡(luò)爬蟲(chóng),就是在 瀏覽器上,代替人類爬取數(shù)據(jù) ,Java網(wǎng)絡(luò)爬蟲(chóng)就是通過(guò)Java編寫(xiě)爬蟲(chóng)代碼,代替人類從網(wǎng)絡(luò)上爬取信息數(shù)據(jù)。程序員通過(guò)設(shè)定既定的規(guī)則,讓程序代替我們從網(wǎng)絡(luò)上獲取海量我們需要的數(shù)據(jù),比如圖片,企業(yè)信息等。 爬蟲(chóng)的關(guān)鍵是對(duì)于網(wǎng)頁(yè)信息的解析。 什么

    2024年02月10日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包