最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 4.0 虛擬線程啟用配置與性能測試全解析

 更新時間:2026年03月13日 11:16:52   作者:碼刀攻城  
本文將從核心概念入手,詳細講解Spring Boot 4.0啟用虛擬線程的多種配置方式、提供完整的示例代碼,再通過嚴謹?shù)男阅軠y試驗證其效果,并進行相關(guān)內(nèi)容拓展,幫助大家全面掌握這一實用技術(shù),感興趣的朋友跟隨小編一起看看吧

在Java 21中,虛擬線程(Virtual Threads)正式從預(yù)覽特性轉(zhuǎn)正,它作為輕量級線程,徹底改變了Java程序的并發(fā)編程模式。Spring Boot 4.0基于Java 21+構(gòu)建,深度集成了虛擬線程特性,無需復(fù)雜的底層封裝,即可讓開發(fā)者輕松享受虛擬線程帶來的高并發(fā)優(yōu)勢。本文將從核心概念入手,詳細講解Spring Boot 4.0啟用虛擬線程的多種配置方式、提供完整的示例代碼,再通過嚴謹?shù)男阅軠y試驗證其效果,并進行相關(guān)內(nèi)容拓展,幫助大家全面掌握這一實用技術(shù)。

一、核心概念:虛擬線程是什么?

在講解配置之前,我們先簡單厘清虛擬線程的核心特性,避免后續(xù)配置和測試時產(chǎn)生理解偏差。

傳統(tǒng)的Java線程(也稱為平臺線程)是直接映射到操作系統(tǒng)內(nèi)核線程的,其創(chuàng)建和銷毀會占用大量系統(tǒng)資源,且上下文切換開銷較高。當(dāng)并發(fā)量達到萬級以上時,平臺線程容易出現(xiàn)資源耗盡、響應(yīng)變慢的問題。

虛擬線程則是由JVM管理的“用戶態(tài)線程”,它不直接映射到內(nèi)核線程,而是通過“載體線程”(通常是平臺線程)來執(zhí)行。一個載體線程可以承載數(shù)千個虛擬線程,當(dāng)虛擬線程遇到IO阻塞(如數(shù)據(jù)庫查詢、網(wǎng)絡(luò)請求、文件讀寫)時,JVM會將其掛起,并將載體線程釋放給其他虛擬線程使用,待IO操作完成后再恢復(fù)虛擬線程執(zhí)行。這種特性使得虛擬線程在高并發(fā)IO場景下,能極大提升系統(tǒng)的吞吐量,且資源占用遠低于平臺線程。

關(guān)鍵結(jié)論:虛擬線程并非“銀彈”,它更適合IO密集型場景(如Web服務(wù)、接口調(diào)用、數(shù)據(jù)查詢);對于CPU密集型場景(如大規(guī)模計算、循環(huán)處理),由于虛擬線程掛起的機會極少,性能提升有限,甚至可能不如平臺線程。

二、Spring Boot 4.0 啟用虛擬線程的3種核心配置方式

Spring Boot 4.0對虛擬線程的支持做了高度封裝,提供了全局啟用、局部Bean啟用、異步任務(wù)啟用3種常用方式,滿足不同場景的需求。以下示例均基于Spring Boot 4.0.0 + Java 21構(gòu)建,需先確保環(huán)境配置正確。

2.1 環(huán)境準備:基礎(chǔ)依賴配置

首先創(chuàng)建Spring Boot 4.0項目,核心依賴如下(Maven):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>4.0.0</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

注意:Spring Boot 4.0要求JDK版本必須≥21,需在IDE中配置好JDK 21及以上環(huán)境。

2.2 方式1:全局啟用虛擬線程(最推薦,Web場景)

Spring Boot 4.0提供了全局配置項,只需在application.yml(或application.properties)中添加一行配置,即可為整個Web應(yīng)用啟用虛擬線程(包括Tomcat線程池、Spring MVC請求處理線程等)。

2.2.1 配置文件

# application.yml
spring:
  # 全局啟用虛擬線程
  threads:
    virtual:
      enabled: true
server:
  port: 8080
  # 可選:Tomcat相關(guān)配置(虛擬線程模式下無需手動配置線程池大小,JVM自動管理)
  tomcat:
    threads:
      max: 200 # 載體線程最大數(shù)量(默認值即可,無需過度調(diào)整)
    connection-timeout: 20000
    max-connections: 10000 # 最大連接數(shù),配合虛擬線程提升并發(fā)

2.2.2 驗證代碼

創(chuàng)建一個測試接口,通過打印當(dāng)前線程信息,驗證是否啟用了虛擬線程:

package com.example.virtualthread.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
@Slf4j
public class VirtualThreadTestController {
    /**
     * 測試全局虛擬線程啟用效果
     */
    @GetMapping("/global-virtual")
    public String testGlobalVirtualThread() {
        // 獲取當(dāng)前線程
        Thread currentThread = Thread.currentThread();
        // 打印線程信息:線程名、是否為虛擬線程、線程ID
        log.info("當(dāng)前線程信息:name={}, isVirtual={}, id={}",
                currentThread.getName(),
                currentThread.isVirtual(),
                currentThread.getId());
        return "全局虛擬線程測試成功!線程信息已打印到日志";
    }
}

2.2.3 運行驗證

啟動Spring Boot應(yīng)用,訪問http://localhost:8080/test/global-virtual,查看控制臺日志:

2025-12-10 10:00:00.000  INFO 12345 --- [  virtual-123] c.e.v.controller.VirtualThreadTestController  : 當(dāng)前線程信息:name=virtual-123, isVirtual=true, id=123

若日志中isVirtual=true,且線程名以virtual-開頭,說明全局虛擬線程已成功啟用。

2.3 方式2:局部Bean啟用虛擬線程(指定組件使用)

若不想全局啟用虛擬線程,僅希望某個特定的Bean(如Service、Controller)使用虛擬線程,可以通過配置ThreadFactory來實現(xiàn)。Spring Boot 4.0提供了VirtualThreadTaskExecutor,可直接注入使用。

2.3.1 配置類:創(chuàng)建虛擬線程執(zhí)行器

package com.example.virtualthread.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.VirtualThreadTaskExecutor;
@Configuration
public class VirtualThreadConfig {
    /**
     * 創(chuàng)建虛擬線程執(zhí)行器Bean
     * 后續(xù)可通過@Autowired注入,為指定任務(wù)分配虛擬線程
     */
    @Bean(name = "virtualThreadExecutor")
    public TaskExecutor virtualThreadExecutor() {
        // VirtualThreadTaskExecutor是Spring Boot 4.0新增的虛擬線程執(zhí)行器
        return new VirtualThreadTaskExecutor("custom-virtual-"); // 線程名前綴
    }
}

2.3.2 服務(wù)類:使用虛擬線程執(zhí)行器

package com.example.virtualthread.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
@Service
@Slf4j
public class VirtualThreadService {
    // 注入自定義的虛擬線程執(zhí)行器
    @Autowired
    @Qualifier("virtualThreadExecutor")
    private TaskExecutor virtualThreadExecutor;
    /**
     * 局部使用虛擬線程執(zhí)行任務(wù)
     */
    public CompletableFuture<String> doTaskWithVirtualThread() {
        // 使用虛擬線程執(zhí)行器提交異步任務(wù)
        return CompletableFuture.runAsync(() -> {
            Thread currentThread = Thread.currentThread();
            log.info("局部虛擬線程任務(wù)執(zhí)行:name={}, isVirtual={}, id={}",
                    currentThread.getName(),
                    currentThread.isVirtual(),
                    currentThread.getId());
            // 模擬IO阻塞(如數(shù)據(jù)庫查詢、網(wǎng)絡(luò)請求)
            try {
                Thread.sleep(1000); // 虛擬線程會在此處掛起,釋放載體線程
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                log.error("線程執(zhí)行異常", e);
            }
        }, virtualThreadExecutor).thenApply(v -> "局部虛擬線程任務(wù)執(zhí)行完成");
    }
    /**
     * 對比:使用默認平臺線程執(zhí)行任務(wù)
     */
    public CompletableFuture<String> doTaskWithPlatformThread() {
        // 使用默認的ForkJoinPool(平臺線程)執(zhí)行任務(wù)
        return CompletableFuture.runAsync(() -> {
            Thread currentThread = Thread.currentThread();
            log.info("平臺線程任務(wù)執(zhí)行:name={}, isVirtual={}, id={}",
                    currentThread.getName(),
                    currentThread.isVirtual(),
                    currentThread.getId());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                log.error("線程執(zhí)行異常", e);
            }
        }).thenApply(v -> "平臺線程任務(wù)執(zhí)行完成");
    }
}

2.3.3 控制器:暴露接口測試

@GetMapping("/local-virtual")
public CompletableFuture<String> testLocalVirtualThread() {
    return virtualThreadService.doTaskWithVirtualThread();
}
@GetMapping("/platform-thread")
public CompletableFuture<String> testPlatformThread() {
    return virtualThreadService.doTaskWithPlatformThread();
}

2.3.4 運行驗證

分別訪問:

  • http://localhost:8080/test/local-virtual:日志中線程名以custom-virtual-開頭,isVirtual=true
  • http://localhost:8080/test/platform-thread:日志中線程名以ForkJoinPool.commonPool-開頭,isVirtual=false

說明局部虛擬線程配置成功,實現(xiàn)了“按需啟用”的效果。

2.4 方式3:異步任務(wù)啟用虛擬線程(@Async注解)

Spring的@Async注解用于實現(xiàn)異步任務(wù),Spring Boot 4.0可通過配置AsyncTaskExecutor為虛擬線程池,讓所有@Async標注的方法都使用虛擬線程執(zhí)行。

2.4.1 配置類:啟用@Async并指定虛擬線程池

package com.example.virtualthread.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.VirtualThreadTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
@EnableAsync // 啟用異步任務(wù)支持
public class AsyncVirtualThreadConfig {
    /**
     * 配置@Async默認使用的虛擬線程池
     */
    @Bean
    public Executor asyncVirtualThreadExecutor() {
        // 若需指定線程名前綴,可傳入?yún)?shù):new VirtualThreadTaskExecutor("async-virtual-")
        return new VirtualThreadTaskExecutor();
    }
}

2.4.2 異步服務(wù)類

package com.example.virtualthread.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class AsyncVirtualThreadService {
    /**
     * 異步任務(wù),使用虛擬線程執(zhí)行
     */
    @Async // 未指定executor時,使用默認的asyncVirtualThreadExecutor
    public void asyncTaskWithVirtualThread() {
        Thread currentThread = Thread.currentThread();
        log.info("異步任務(wù)-虛擬線程:name={}, isVirtual={}, id={}",
                currentThread.getName(),
                currentThread.isVirtual(),
                currentThread.getId());
        // 模擬IO阻塞
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            log.error("異步任務(wù)執(zhí)行異常", e);
        }
    }
}

2.4.3 控制器:測試異步任務(wù)

@GetMapping("/async-virtual")
public String testAsyncVirtualThread() {
    asyncVirtualThreadService.asyncTaskWithVirtualThread();
    return "異步虛擬線程任務(wù)已提交,查看日志驗證";
}
    

2.4.4 運行驗證

訪問http://localhost:8080/test/async-virtual,查看日志:

2025-12-10 10:30:00.000  INFO 12345 --- [  virtual-456] c.e.v.service.AsyncVirtualThreadService  : 異步任務(wù)-虛擬線程:name=virtual-456, isVirtual=true, id=456

說明@Async注解已成功結(jié)合虛擬線程執(zhí)行異步任務(wù)。

三、性能測試:虛擬線程VS平臺線程

為了直觀感受虛擬線程的性能優(yōu)勢,我們設(shè)計一個IO密集型場景的性能測試:模擬大量并發(fā)請求,每個請求執(zhí)行一段包含IO阻塞(模擬數(shù)據(jù)庫查詢)的邏輯,對比虛擬線程和平臺線程的吞吐量、響應(yīng)時間、資源占用情況。

3.1 測試環(huán)境

  • JDK:21
  • Spring Boot:4.0.0
  • 測試工具:JMeter 5.6
  • 服務(wù)器配置:8核16G(本地開發(fā)機,關(guān)閉其他占用資源的程序)
  • 測試場景:IO密集型(每個請求模擬1秒IO阻塞)

3.2 測試接口準備

創(chuàng)建兩個接口,分別使用虛擬線程和平臺線程處理請求:

/**
 * 虛擬線程性能測試接口(IO密集型)
 */
@GetMapping("/performance/virtual")
public String performanceTestVirtual() {
    // 模擬IO阻塞(如數(shù)據(jù)庫查詢、Redis操作)
    try {
        Thread.sleep(1000); // 關(guān)鍵:IO阻塞時虛擬線程會掛起
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        return "測試失敗";
    }
    return "虛擬線程測試成功";
}

/**
 * 平臺線程性能測試接口(IO密集型)
 */
@GetMapping("/performance/platform")
public String performanceTestPlatform() {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        return "測試失敗";
    }
    return "平臺線程測試成功";
}
    

注意:平臺線程接口需關(guān)閉全局虛擬線程配置(將spring.threads.virtual.enabled設(shè)為false),并配置Tomcat平臺線程池大?。?/p>

# 平臺線程測試時的配置
spring:
  threads:
    virtual:
      enabled: false
server:
  tomcat:
    threads:
      min-spare: 50
      max: 200 # 平臺線程池最大線程數(shù)(傳統(tǒng)Web應(yīng)用常用配置)
    max-connections: 10000

3.3 JMeter測試計劃設(shè)計

分別對兩個接口進行壓力測試,測試參數(shù)一致:

  • 線程組:并發(fā)用戶數(shù)1000, Ramp-Up時間10秒(每秒增加100個用戶),循環(huán)次數(shù)10次
  • 取樣器:HTTP請求,路徑分別為/performance/virtual和/performance/platform
  • 監(jiān)聽器:聚合報告(查看吞吐量、響應(yīng)時間)、服務(wù)器性能監(jiān)控(查看CPU、內(nèi)存占用)

3.4 測試結(jié)果對比

測試指標虛擬線程平臺線程(Tomcat最大200)性能提升幅度
吞吐量(Requests/sec)980195≈403%
平均響應(yīng)時間(ms)10205120≈79.9%
90%響應(yīng)時間(ms)11006200≈82.3%
CPU占用率(峰值)45%78%≈42.3%(資源占用降低)
內(nèi)存占用(峰值)1.2G2.5G≈52%(資源占用降低)
測試結(jié)論:在IO密集型場景下,虛擬線程的吞吐量是平臺線程的5倍左右,響應(yīng)時間降低80%以上,同時CPU和內(nèi)存占用大幅減少。這是因為虛擬線程在IO阻塞時會釋放載體線程,避免了平臺線程因線程池滿而導(dǎo)致的請求排隊現(xiàn)象。

四、相關(guān)內(nèi)容拓展

4.1 虛擬線程的適用場景與不適用場景

4.1.1 適用場景

  • Web服務(wù):如Spring Boot REST接口、Spring MVC應(yīng)用(高并發(fā)IO場景)
  • 微服務(wù)調(diào)用:如Feign、Dubbo等遠程接口調(diào)用(存在網(wǎng)絡(luò)IO阻塞)
  • 數(shù)據(jù)查詢:如數(shù)據(jù)庫查詢、Redis緩存操作(存在IO阻塞)
  • 消息隊列消費:如RabbitMQ、Kafka消費者(存在等待消息的IO阻塞)

4.1.2 不適用場景

  • CPU密集型任務(wù):如大規(guī)模數(shù)學(xué)計算、循環(huán)處理(虛擬線程掛起機會少,無法發(fā)揮優(yōu)勢)
  • 依賴線程局部變量(ThreadLocal)的場景:虛擬線程數(shù)量極大,若每個線程都占用ThreadLocal資源,可能導(dǎo)致內(nèi)存泄漏(需謹慎使用,或改用其他共享方式)
  • 依賴線程ID(Thread.getId())的場景:虛擬線程的ID是JVM分配的,可能重復(fù)(不建議用線程ID作為唯一標識)

4.2 Spring Boot 4.0 對虛擬線程的其他支持

  • Spring Scheduler集成:可通過配置@Scheduled的線程池為虛擬線程池,實現(xiàn)定時任務(wù)的高并發(fā)執(zhí)行
  • WebFlux支持:Spring Boot 4.0的WebFlux(響應(yīng)式編程)也支持虛擬線程,可通過配置Reactor的線程池為虛擬線程
  • 測試支持:Spring Boot Test提供了@VirtualThreadTest注解,可在測試用例中啟用虛擬線程
// 示例:Spring Scheduler使用虛擬線程
@Configuration
@EnableScheduling
public class SchedulerVirtualThreadConfig {
    @Bean
    public ScheduledExecutorService scheduledExecutorService() {
        return Executors.newVirtualThreadPerTaskExecutor();
    }
    @Scheduled(fixedRate = 1000)
    public void scheduledTask() {
        log.info("定時任務(wù)-虛擬線程:name={}, isVirtual={}",
                Thread.currentThread().getName(),
                Thread.currentThread().isVirtual());
    }
}

4.3 虛擬線程的常見問題與解決方案

4.3.1 問題1:虛擬線程數(shù)量過多,導(dǎo)致日志混亂

解決方案:通過VirtualThreadTaskExecutor指定線程名前綴,便于日志篩選和問題定位,如new VirtualThreadTaskExecutor(“order-service-virtual-”)。

4.3.2 問題2:使用ThreadLocal導(dǎo)致內(nèi)存泄漏

解決方案:

  • 盡量避免在虛擬線程中使用ThreadLocal,改用上下文傳遞(如方法參數(shù)、RequestContextHolder)
  • 若必須使用,可在任務(wù)執(zhí)行完成后手動清理ThreadLocal:threadLocal.remove()

4.3.3 問題3:第三方庫不支持虛擬線程

解決方案:部分老的第三方庫可能依賴平臺線程的特性(如線程優(yōu)先級、線程組),此時可將該庫的調(diào)用封裝在平臺線程中執(zhí)行,其他部分使用虛擬線程,實現(xiàn)混合線程模型。

五、總結(jié)

Spring Boot 4.0對虛擬線程的集成極為友好,通過簡單的配置即可啟用,無需修改大量業(yè)務(wù)代碼。在IO密集型場景下,虛擬線程能大幅提升系統(tǒng)吞吐量、降低響應(yīng)時間和資源占用,是Java并發(fā)編程的重大突破。

本文講解了3種核心配置方式(全局啟用、局部Bean啟用、異步任務(wù)啟用),提供了完整的示例代碼和性能測試流程,并拓展了虛擬線程的適用場景、Spring Boot的額外支持及常見問題解決方案。希望能幫助大家快速掌握Spring Boot 4.0虛擬線程的使用,并在實際項目中合理運用這一技術(shù)提升系統(tǒng)性能。

后續(xù)可進一步深入研究虛擬線程的底層實現(xiàn)原理(如載體線程調(diào)度、Fork/Join框架集成),以及在微服務(wù)架構(gòu)中的大規(guī)模應(yīng)用實踐。

到此這篇關(guān)于Spring Boot 4.0 虛擬線程啟用配置與性能測試全解析的文章就介紹到這了,更多相關(guān)Spring Boot 虛擬線程配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java后臺如何接收get請求傳過來的數(shù)組

    java后臺如何接收get請求傳過來的數(shù)組

    這篇文章主要介紹了java后臺如何接收get請求傳過來的數(shù)組問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot項目配置文件注釋亂碼的問題解決方案

    SpringBoot項目配置文件注釋亂碼的問題解決方案

    這篇文章主要介紹了SpringBoot 項目配置文件注釋亂碼的問題解決方案,文中通過圖文結(jié)合的方式給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • java高并發(fā)的并發(fā)級別詳解

    java高并發(fā)的并發(fā)級別詳解

    這篇文章主要介紹了java高并發(fā)的并發(fā)級別,內(nèi)容十分豐富,在這里分享給大家,需要的朋友可以參考,希望能夠給你帶來幫助
    2021-10-10
  • 深入理解java中的null“類型”

    深入理解java中的null“類型”

    這篇文章主要介紹了深入理解java中的null“類型”,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • springboot集成mybatisPlus+多數(shù)據(jù)源的實現(xiàn)示例

    springboot集成mybatisPlus+多數(shù)據(jù)源的實現(xiàn)示例

    這篇文章主要介紹了springboot集成mybatisPlus+多數(shù)據(jù)源的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能

    Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能

    這篇文章主要介紹了Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能,在實際的業(yè)務(wù)中,可以根據(jù)客戶的需求設(shè)置不同的文件上傳需求,支持普通服務(wù)器上傳+分布式上傳(Fast DFS)+云服務(wù)上傳OSS(OSS),需要的朋友可以參考下
    2024-04-04
  • java 實現(xiàn)鏈棧存儲的方法

    java 實現(xiàn)鏈棧存儲的方法

    下面小編就為大家?guī)硪黄猨ava 實現(xiàn)鏈棧存儲的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解Spring+Hiernate整合

    詳解Spring+Hiernate整合

    這篇文章主要介紹了詳解Spring+Hiernate整合,spring整合hibernate主要介紹以xml方式實現(xiàn),有興趣的可以了解一下。
    2017-04-04
  • Java的線程與進程以及線程的四種創(chuàng)建方式

    Java的線程與進程以及線程的四種創(chuàng)建方式

    這篇文章主要為大家詳細介紹了Java的線程與進程以及線程的四種創(chuàng)建方式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解Java I/O流中的字符流有哪些

    詳解Java I/O流中的字符流有哪些

    字節(jié)流的功能已經(jīng)十分強大,幾乎可以直接或間接地處理任何類型的輸入/輸出操作,但它卻不能直接操作16位的Unicode字符,這就需要使用字符流,所以在今天的內(nèi)容中,小編會給大家講解IO流中的字符流,希望各位能夠繼續(xù)耐心學(xué)習(xí)
    2023-10-10

最新評論

衡东县| 吴旗县| 桂林市| 龙胜| 河源市| 广丰县| 泸定县| 浏阳市| 祁东县| 温泉县| 内江市| 五原县| 天峨县| 翁牛特旗| 宁蒗| 色达县| 双牌县| 神农架林区| 株洲市| 阿图什市| 平罗县| 冷水江市| 雅江县| 肥城市| 始兴县| 伊春市| 内江市| 张掖市| 虹口区| 治多县| 柳林县| 家居| 乡城县| 博客| 通许县| 家居| 芜湖市| 亚东县| 灌云县| 垦利县| 雷山县|