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

Java實(shí)時(shí)信號(hào)處理的五種方式

 更新時(shí)間:2025年06月30日 09:20:40   作者:墨瑾軒  
實(shí)時(shí)信號(hào)處理還在卡頓?這和用老式打字機(jī)寫(xiě)小說(shuō)有什么區(qū)別,Java與實(shí)時(shí)信號(hào)處理系統(tǒng)的集成就像給系統(tǒng)裝了個(gè)"魔法加速器",今天我們就用Java代碼+實(shí)戰(zhàn)技巧,打造一套"實(shí)時(shí)信號(hào)處理的魔法工具箱",讓你的系統(tǒng)比"咖啡機(jī)出水"還流暢,需要的朋友可以參考下

“實(shí)時(shí)信號(hào)處理還在卡頓?這和用老式打字機(jī)寫(xiě)小說(shuō)有什么區(qū)別!”

Java與實(shí)時(shí)信號(hào)處理系統(tǒng)的集成就像給系統(tǒng)裝了個(gè)"魔法加速器":

  • 低延遲:像閃電俠一樣快速響應(yīng)信號(hào)
  • 高精度:像顯微鏡般捕捉每個(gè)數(shù)據(jù)點(diǎn)
  • 可擴(kuò)展:像樂(lè)高一樣靈活拼接模塊

今天我們就用Java代碼+實(shí)戰(zhàn)技巧,打造一套"實(shí)時(shí)信號(hào)處理的魔法工具箱",讓你的系統(tǒng)比"咖啡機(jī)出水"還流暢!

1. 數(shù)據(jù)采集的“魔法吸塵器”:從“斷斷續(xù)續(xù)”到“絲滑捕捉”

“信號(hào)采集總丟包?這和用漏勺撈珍珠有什么區(qū)別!”

核心問(wèn)題:

  • 延遲過(guò)高:像用慢動(dòng)作拍攝流星
  • 丟包嚴(yán)重:像漏勺撈珍珠,數(shù)據(jù)一個(gè)接一個(gè)溜走
  • 精度不足:像用模糊的望遠(yuǎn)鏡看星星

解決方案:

  • Java Sound API:用TargetDataLine實(shí)時(shí)捕獲音頻
  • 多線程采集:用BlockingQueue緩沖數(shù)據(jù)
  • 硬件加速:用JNI調(diào)用C/C++的高性能庫(kù)

代碼示例:用Java實(shí)時(shí)采集音頻信號(hào)

// 1. 音頻采集工具類  
import javax.sound.sampled.*;  
import java.nio.ByteBuffer;  
import java.util.concurrent.BlockingQueue;  
import java.util.concurrent.LinkedBlockingQueue;  

public class AudioRecorder {  
    private TargetDataLine audioLine;  
    private BlockingQueue<ByteBuffer> bufferQueue = new LinkedBlockingQueue<>(10); // 緩沖隊(duì)列  

    public void startRecording(int sampleRate, int bufferSize) throws LineUnavailableException {  
        // 1. 定義音頻格式  
        AudioFormat format = new AudioFormat(  
            sampleRate, // 采樣率(如44100Hz)  
            16,          // 位深  
            2,           // 聲道數(shù)  
            true,        // 簽名  
            true         // 大端序  
        );  

        // 2. 獲取音頻輸入線  
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);  
        audioLine = (TargetDataLine) AudioSystem.getLine(info);  
        audioLine.open(format, bufferSize);  

        // 3. 開(kāi)始錄制  
        audioLine.start();  

        // 4. 啟動(dòng)數(shù)據(jù)讀取線程  
        new Thread(() -> {  
            byte[] data = new byte[bufferSize];  
            while (audioLine.isActive()) {  
                int readBytes = audioLine.read(data, 0, data.length);  
                if (readBytes > 0) {  
                    ByteBuffer buffer = ByteBuffer.wrap(data);  
                    try {  
                        bufferQueue.put(buffer); // 存入緩沖隊(duì)列  
                    } catch (InterruptedException e) {  
                        Thread.currentThread().interrupt();  
                    }  
                }  
            }  
        }).start();  
    }  

    public BlockingQueue<ByteBuffer> getBufferQueue() {  
        return bufferQueue;  
    }  

    public void stopRecording() {  
        if (audioLine != null && audioLine.isOpen()) {  
            audioLine.stop();  
            audioLine.close();  
        }  
    }  
}  

// 2. 使用示例  
public class Main {  
    public static void main(String[] args) {  
        AudioRecorder recorder = new AudioRecorder();  
        try {  
            recorder.startRecording(44100, 1024); // 44.1kHz采樣,1024字節(jié)緩沖  
            BlockingQueue<ByteBuffer> queue = recorder.getBufferQueue();  

            // 啟動(dòng)處理線程  
            new Thread(() -> {  
                while (true) {  
                    try {  
                        ByteBuffer buffer = queue.take();  
                        // 處理音頻數(shù)據(jù)(如FFT分析)  
                        System.out.println("接收到數(shù)據(jù):" + buffer.remaining() + "字節(jié)");  
                    } catch (InterruptedException e) {  
                        Thread.currentThread().interrupt();  
                    }  
                }  
            }).start();  
        } catch (LineUnavailableException e) {  
            e.printStackTrace();  
        }  
    }  
}  

2. 信號(hào)處理的“魔法放大鏡”:從“模糊信號(hào)”到“高清解析”

“信號(hào)分析總模糊?這和用老花鏡看顯微鏡有什么區(qū)別!”

核心技術(shù):

技術(shù)作用特點(diǎn)
FFT(快速傅里葉變換)將時(shí)域信號(hào)轉(zhuǎn)頻域揭示隱藏的頻率成分
濾波算法去除噪聲或提取特定頻率滑動(dòng)平均、高通/低通濾波器
特征提取提取關(guān)鍵指標(biāo)(如峰值、能量)用于機(jī)器學(xué)習(xí)或?qū)崟r(shí)決策

代碼示例:用Java實(shí)現(xiàn)FFT分析

// 1. FFT工具類  
import org.apache.commons.math3.complex.Complex;  
import org.apache.commons.math3.transform.DftNormalization;  
import org.apache.commons.math3.transform.FastFourierTransformer;  
import org.apache.commons.math3.transform.TransformType;  

public class FFTProcessor {  
    private FastFourierTransformer transformer;  

    public FFTProcessor() {  
        transformer = new FastFourierTransformer(DftNormalization.STANDARD);  
    }  

    // 將字節(jié)數(shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)組  
    public float[] bytesToFloats(byte[] bytes) {  
        float[] samples = new float[bytes.length / 2]; // 16位數(shù)據(jù)  
        for (int i = 0; i < samples.length; i++) {  
            int shortValue = (bytes[2 * i] & 0xFF) | (bytes[2 * i + 1] << 8); // 大端序  
            samples[i] = (float) shortValue / 32768f; // 歸一化到[-1,1]  
        }  
        return samples;  
    }  

    // 執(zhí)行FFT并返回頻譜  
    public Complex[] computeFFT(float[] samples) {  
        return transformer.transform(samples, TransformType.FORWARD);  
    }  

    // 計(jì)算能量譜密度  
    public float[] computeEnergySpectrum(Complex[] fftResult) {  
        float[] energy = new float[fftResult.length];  
        for (int i = 0; i < fftResult.length; i++) {  
            energy[i] = (float) (fftResult[i].abs() * fftResult[i].abs()); // 能量平方  
        }  
        return energy;  
    }  
}  

// 2. 使用示例  
public class SignalProcessor {  
    public static void main(String[] args) {  
        // 假設(shè)已采集到音頻數(shù)據(jù)  
        byte[] audioData = ...;  
        FFTProcessor fftProcessor = new FFTProcessor();  
        float[] samples = fftProcessor.bytesToFloats(audioData);  
        Complex[] fftResult = fftProcessor.computeFFT(samples);  
        float[] energy = fftProcessor.computeEnergySpectrum(fftResult);  

        // 找出最大能量頻率  
        int maxIndex = 0;  
        float maxValue = energy[0];  
        for (int i = 1; i < energy.length; i++) {  
            if (energy[i] > maxValue) {  
                maxIndex = i;  
                maxValue = energy[i];  
            }  
        }  
        float frequency = (maxIndex * 44100f) / samples.length; // 假設(shè)采樣率44.1kHz  
        System.out.println("最高能量頻率:" + frequency + "Hz");  
    }  
}  

3. 低延遲優(yōu)化的“魔法加速器”:從“慢動(dòng)作”到“超速模式”

“系統(tǒng)響應(yīng)總延遲?這和用蝸牛跑馬拉松有什么區(qū)別!”

核心策略:

  • 減少緩沖區(qū)大小:像用小碗喝湯,快速響應(yīng)
  • 優(yōu)先級(jí)調(diào)度:用Thread.setPriority()提升線程優(yōu)先級(jí)
  • 異步處理:用CompletableFuture非阻塞執(zhí)行

代碼示例:優(yōu)化線程調(diào)度和緩沖區(qū)

// 1. 低延遲線程池配置  
import java.util.concurrent.Executors;  
import java.util.concurrent.ThreadFactory;  
import java.util.concurrent.atomic.AtomicInteger;  

public class LowLatencyThreadFactory implements ThreadFactory {  
    private final AtomicInteger threadNumber = new AtomicInteger(1);  
    private final String namePrefix;  

    public LowLatencyThreadFactory(String namePrefix) {  
        this.namePrefix = namePrefix;  
    }  

    @Override  
    public Thread newThread(Runnable r) {  
        Thread thread = new Thread(r);  
        thread.setName(namePrefix + "-" + threadNumber.getAndIncrement());  
        thread.setPriority(Thread.MAX_PRIORITY); // 設(shè)置最高優(yōu)先級(jí)  
        thread.setDaemon(true); // 后臺(tái)線程  
        return thread;  
    }  
}  

// 2. 使用示例  
public class RealTimeProcessor {  
    private ExecutorService executor;  

    public void init() {  
        executor = Executors.newFixedThreadPool(  
            Runtime.getRuntime().availableProcessors(),  
            new LowLatencyThreadFactory("SignalProcessor")  
        );  
    }  

    public void processSignal(final ByteBuffer buffer) {  
        executor.submit(() -> {  
            // 執(zhí)行耗時(shí)處理(如FFT、濾波)  
            // ...  
            System.out.println("處理完成!");  
        });  
    }  
}  

4. 多線程的“魔法分身”:從“單槍匹馬”到“群英薈萃”

“單線程處理太慢?這和用一只手打排球有什么區(qū)別!”

核心模式:

  • 生產(chǎn)者-消費(fèi)者模式:采集線程生產(chǎn)數(shù)據(jù),處理線程消費(fèi)
  • 線程池優(yōu)化:用ForkJoinPool并行處理
  • 鎖優(yōu)化:用ReentrantLock替代synchronized

代碼示例:多線程處理信號(hào)

// 1. 生產(chǎn)者-消費(fèi)者模型  
public class SignalPipeline {  
    private final BlockingQueue<ByteBuffer> inputQueue = new LinkedBlockingQueue<>(100);  
    private final List<Thread> workers = new ArrayList<>();  

    public void startProcessing(int workerCount) {  
        for (int i = 0; i < workerCount; i++) {  
            workers.add(new Thread(() -> {  
                while (true) {  
                    try {  
                        ByteBuffer buffer = inputQueue.take();  
                        // 處理數(shù)據(jù)  
                        process(buffer);  
                    } catch (InterruptedException e) {  
                        Thread.currentThread().interrupt();  
                    }  
                }  
            }));  
        }  
        workers.forEach(Thread::start);  
    }  

    private void process(ByteBuffer buffer) {  
        // 處理邏輯(如FFT、濾波)  
    }  
}  

// 2. 使用示例  
public class Main {  
    public static void main(String[] args) {  
        AudioRecorder recorder = new AudioRecorder();  
        SignalPipeline pipeline = new SignalPipeline();  

        try {  
            recorder.startRecording(44100, 1024); // 低延遲緩沖  
            pipeline.startProcessing(4); // 啟動(dòng)4個(gè)處理線程  

            // 將采集到的數(shù)據(jù)推入管道  
            new Thread(() -> {  
                while (true) {  
                    try {  
                        ByteBuffer buffer = recorder.getBufferQueue().take();  
                        pipeline.getInputQueue().put(buffer);  
                    } catch (InterruptedException e) {  
                        Thread.currentThread().interrupt();  
                    }  
                }  
            }).start();  
        } catch (LineUnavailableException e) {  
            e.printStackTrace();  
        }  
    }  
}  

5. 硬件集成的“魔法接口”:從“紙上談兵”到“實(shí)戰(zhàn)操作”

“信號(hào)無(wú)法輸出?這和畫(huà)餅充饑有什么區(qū)別!”

核心方案:

  • GPIO控制:用Raspberry Pi的pigpio-java控制硬件
  • 串口通信:用jSerialComm與傳感器通信
  • 實(shí)時(shí)渲染:用JavaFX或OpenGL顯示波形

代碼示例:用Java控制Raspberry Pi的LED

// 1. GPIO控制類(需在Raspberry Pi運(yùn)行)  
import com.pi4j.io.gpio.*;  

public class LedController {  
    private GpioController gpio;  
    private GpioPinDigitalOutput ledPin;  

    public LedController(int pinNumber) {  
        gpio = GpioFactory.getInstance();  
        ledPin = gpio.provisionDigitalOutputPin(  
            PinUtil.getPinByAddress(pinNumber),  
            "LED",  
            PinState.LOW  
        );  
    }  

    public void setLedState(boolean state) {  
        if (state) {  
            ledPin.high();  
        } else {  
            ledPin.low();  
        }  
    }  

    public void shutdown() {  
        gpio.shutdown();  
    }  
}  

// 2. 使用示例(根據(jù)音頻能量控制LED閃爍)  
public class AudioControlledLed {  
    public static void main(String[] args) {  
        LedController led = new LedController(17); // GPIO17引腳  
        AudioRecorder recorder = new AudioRecorder();  

        try {  
            recorder.startRecording(44100, 1024);  
            FFTProcessor fft = new FFTProcessor();  

            while (true) {  
                ByteBuffer buffer = recorder.getBufferQueue().take();  
                float[] samples = fft.bytesToFloats(buffer.array());  
                Complex[] fftResult = fft.computeFFT(samples);  
                float[] energy = fft.computeEnergySpectrum(fftResult);  

                // 如果能量超過(guò)閾值,點(diǎn)亮LED  
                if (energy[0] > 0.5f) {  
                    led.setLedState(true);  
                } else {  
                    led.setLedState(false);  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            led.shutdown();  
        }  
    }  
}  

6. 實(shí)戰(zhàn)案例:一個(gè)完整的實(shí)時(shí)心率監(jiān)測(cè)系統(tǒng)

“現(xiàn)在你已經(jīng)能用Java搭建一個(gè)’醫(yī)療級(jí)信號(hào)處理系統(tǒng)’了!”

系統(tǒng)需求:

  1. 數(shù)據(jù)采集:通過(guò)心率傳感器(如Pulse Sensor)獲取PPG信號(hào)
  2. 信號(hào)處理:使用FFT計(jì)算心率
  3. 實(shí)時(shí)顯示:用JavaFX顯示波形和心率值
  4. 報(bào)警功能:異常心率觸發(fā)蜂鳴器

代碼示例:完整系統(tǒng)框架

// 1. JavaFX實(shí)時(shí)波形顯示  
import javafx.application.Application;  
import javafx.scene.Scene;  
import javafx.scene.chart.LineChart;  
import javafx.scene.chart.NumberAxis;  
import javafx.scene.chart.XYChart;  
import javafx.stage.Stage;  

public class RealTimePlot extends Application {  
    private XYChart.Series<Number, Number> series = new XYChart.Series<>();  
    private final NumberAxis xAxis = new NumberAxis();  
    private final NumberAxis yAxis = new NumberAxis();  

    @Override  
    public void start(Stage stage) {  
        LineChart<Number, Number> chart = new LineChart<>(xAxis, yAxis);  
        chart.setTitle("實(shí)時(shí)心率波形");  
        xAxis.setLabel("時(shí)間");  
        yAxis.setLabel("振幅");  
        chart.getData().add(series);  

        Scene scene = new Scene(chart, 800, 600);  
        stage.setScene(scene);  
        stage.show();  
    }  

    public void updateData(float[] samples) {  
        Platform.runLater(() -> {  
            for (float sample : samples) {  
                series.getData().add(new XYChart.Data<>(series.getData().size(), sample));  
            }  
            // 移除舊數(shù)據(jù)(只保留最近100個(gè)點(diǎn))  
            while (series.getData().size() > 100) {  
                series.getData().remove(0);  
            }  
        });  
    }  

    public static void main(String[] args) {  
        launch(args);  
    }  
}  

// 2. 主程序集成  
public class HeartRateMonitor {  
    public static void main(String[] args) {  
        // 1. 啟動(dòng)JavaFX界面  
        RealTimePlot.launch(RealTimePlot.class);  

        // 2. 初始化硬件和信號(hào)處理  
        AudioRecorder recorder = new AudioRecorder();  
        FFTProcessor fft = new FFTProcessor();  
        LedController alarmLed = new LedController(18); // 報(bào)警LED  

        try {  
            recorder.startRecording(44100, 1024);  

            while (true) {  
                ByteBuffer buffer = recorder.getBufferQueue().take();  
                float[] samples = fft.bytesToFloats(buffer.array());  

                // 更新波形顯示  
                RealTimePlot.updateData(samples);  

                // 計(jì)算心率  
                Complex[] fftResult = fft.computeFFT(samples);  
                float[] energy = fft.computeEnergySpectrum(fftResult);  
                int peakIndex = ...; // 找到峰值索引  
                float heartRate = ...; // 計(jì)算心率  

                // 異常報(bào)警  
                if (heartRate < 40 || heartRate > 180) {  
                    alarmLed.setLedState(true);  
                } else {  
                    alarmLed.setLedState(false);  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            alarmLed.shutdown();  
        }  
    }  
}  

7. 常見(jiàn)問(wèn)題與解決方案:從“迷路”到“導(dǎo)航”

“系統(tǒng)卡頓怎么辦?這和開(kāi)車沒(méi)油有什么區(qū)別!”

問(wèn)題1:音頻采集卡頓

// 錯(cuò)誤提示:緩沖隊(duì)列溢出  
// 解決方案:增加緩沖區(qū)大小或降低采樣率  
recorder.startRecording(22050, 4096); // 降低采樣率到22.05kHz,增大緩沖區(qū)到4KB  

問(wèn)題2:FFT計(jì)算耗時(shí)過(guò)高

// 錯(cuò)誤表現(xiàn):處理線程阻塞  
// 解決方案:使用并行計(jì)算或硬件加速  
// 1. 使用ForkJoinPool  
CompletableFuture.supplyAsync(() -> fft.computeFFT(samples), ForkJoinPool.commonPool());  

// 2. 通過(guò)JNI調(diào)用C語(yǔ)言FFT庫(kù)(如FFTW)  

問(wèn)題3:JavaFX界面無(wú)響應(yīng)

// 錯(cuò)誤表現(xiàn):界面卡頓或無(wú)數(shù)據(jù)更新  
// 解決方案:在FX線程更新數(shù)據(jù)  
Platform.runLater(() -> {  
    // 更新波形數(shù)據(jù)  
});  

“現(xiàn)在你已經(jīng)掌握了Java實(shí)時(shí)信號(hào)處理的’魔法公式’!”

通過(guò)今天的修煉,你已經(jīng)能:

  1. 用Java實(shí)現(xiàn)低延遲數(shù)據(jù)采集和處理
  2. 通過(guò)FFT分析信號(hào)特征
  3. 設(shè)計(jì)多線程實(shí)時(shí)系統(tǒng)架構(gòu)
  4. 實(shí)現(xiàn)硬件集成和可視化

最后彩蛋

System.out.println("信號(hào)處理大師已誕生!你的系統(tǒng)比我的咖啡機(jī)還流暢!");  

標(biāo)題備選方案

  • “Java實(shí)時(shí)信號(hào)處理的5大神器:從卡頓到絲滑的魔法公式”
  • “從地獄到天堂:Java玩轉(zhuǎn)實(shí)時(shí)信號(hào)處理的必殺技”
  • “Java實(shí)時(shí)信號(hào)處理實(shí)戰(zhàn):用代碼打造’醫(yī)療級(jí)監(jiān)測(cè)系統(tǒng)’”

以上就是Java實(shí)時(shí)信號(hào)處理的五種方式的詳細(xì)內(nèi)容,更多關(guān)于Java實(shí)時(shí)信號(hào)處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java計(jì)算集合對(duì)稱差的示例代碼

    java計(jì)算集合對(duì)稱差的示例代碼

    本篇文章主要介紹了java計(jì)算集合對(duì)稱差的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Apache Calcite進(jìn)行SQL解析(java代碼實(shí)例)

    Apache Calcite進(jìn)行SQL解析(java代碼實(shí)例)

    Calcite是一款開(kāi)源SQL解析工具, 可以將各種SQL語(yǔ)句解析成抽象語(yǔ)法樹(shù)AST(Abstract Syntax Tree), 之后通過(guò)操作AST就可以把SQL中所要表達(dá)的算法與關(guān)系體現(xiàn)在具體代碼之中,今天通過(guò)代碼實(shí)例給大家介紹Apache Calcite進(jìn)行SQL解析問(wèn)題,感興趣的朋友一起看看吧
    2022-01-01
  • Maven使用方法詳及方式詳細(xì)介紹

    Maven使用方法詳及方式詳細(xì)介紹

    使用maven倉(cāng)庫(kù)的話需要從網(wǎng)上下載maven的包,比如“apache-maven-3.5.4-bin.tar”,下載完成之后解壓,在解壓的文件夾中的conf目錄下的settings.xml文件夾下就可以配置maven遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)的地址
    2022-11-11
  • Java初學(xué)者必會(huì)的Map集合及其原理

    Java初學(xué)者必會(huì)的Map集合及其原理

    這篇文章主要給大家介紹Map集合及其原理,該集合中的信息是key-value形式,Map集合與Collection集合又有什么不同呢,要想搞清楚以上問(wèn)題,下面跟著小編一起來(lái)看看吧
    2023-06-06
  • Java實(shí)現(xiàn)順序棧原理解析

    Java實(shí)現(xiàn)順序棧原理解析

    這篇文章主要介紹了Java實(shí)現(xiàn)順序棧原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解SpringMVC學(xué)習(xí)系列之國(guó)際化

    詳解SpringMVC學(xué)習(xí)系列之國(guó)際化

    這篇文章主要介紹了詳解SpringMVC學(xué)習(xí)系列之國(guó)際化,詳細(xì)的介紹了關(guān)于瀏覽器,Session,Cookie,URL請(qǐng)求的國(guó)際化的實(shí)現(xiàn),有興趣的可以了解一下
    2017-07-07
  • Java web基礎(chǔ)學(xué)習(xí)之開(kāi)發(fā)環(huán)境篇(詳解)

    Java web基礎(chǔ)學(xué)習(xí)之開(kāi)發(fā)環(huán)境篇(詳解)

    下面小編就為大家?guī)?lái)一篇Java web基礎(chǔ)學(xué)習(xí)之開(kāi)發(fā)環(huán)境篇(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • springboot?如何解決yml沒(méi)有spring的小葉子標(biāo)志問(wèn)題

    springboot?如何解決yml沒(méi)有spring的小葉子標(biāo)志問(wèn)題

    這篇文章主要介紹了springboot?如何解決yml沒(méi)有spring的小葉子標(biāo)志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 多線程之間共享數(shù)據(jù)

    Java 多線程之間共享數(shù)據(jù)

    這篇文章主要介紹了Java 多線程之間共享數(shù)據(jù),圍繞Java 多線程之間共享數(shù)據(jù)展開(kāi)文章內(nèi)容線程范圍的共享變量、使用Map實(shí)現(xiàn)線程范圍內(nèi)數(shù)據(jù)的共享、ThreadLocal實(shí)現(xiàn)線程范圍內(nèi)數(shù)據(jù)的共享,需要的朋友可以參考一下
    2021-10-10
  • java版微信公眾平臺(tái)消息接口應(yīng)用示例

    java版微信公眾平臺(tái)消息接口應(yīng)用示例

    這篇文章主要介紹了java版微信公眾平臺(tái)消息接口應(yīng)用,結(jié)合實(shí)例形式對(duì)比分析了PHP與java應(yīng)用微信公眾平臺(tái)接口的相關(guān)調(diào)用與操作技巧,需要的朋友可以參考下
    2017-07-07

最新評(píng)論