java—多线程编程 Thread

多线程编程 thread



第一节:概念
1,Java 虚拟机允许应用程序并发地运行多个执行线程。
2,多线程目的是更好的使用CPU的资源。
3,单线程实际上主方法就是一个线程。
4,线程是为了更好的利用CPU资源与环境。
5,线程共享资源。
6,每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。

第二节:实现多线程有2种方法

第一种:继承 Thread 类
是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。
第二种:实现 Runnable 接口
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

第三节:线程常用方法

1.获取线程名称:getName();
2.取得当前线程对象:currentThread();
3.判断是否启动:isAlive();
4.强行运行:join();
5.线程休眠:sleep();

6.线程礼让:yield();


第四节:优先级


第五节:线程同步

1 同步的代码块:synchronized( 同步对象 ){
需要同步的代码块
}
2 同步方法:synchronized void 方法名称 ( ) {
需要同步的代码块

}





【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码) Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局限; 2、增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; 3、适合多个相同程序代码的线程区处理同一资源的情况。 下面以典型的买票程序(基本都是以这个为例子)为例,来说明二者的区别。 阅读详情

相关推荐

Java并发编程系列09:继承Thread类实现多线程2

Java(70):多线程学习01-->继承Thread类实现多线程1 https://blog.youkuaiyun.com/fen_fen/article/details/121460313 一、继承Thread类实现多线程02 Thread类本质上也是实现了Runnable接口的一个类,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复

fen_fen的专栏 352

Java 多线程编程:Thread 类的基本用法总结

在 Java 中,多线程编程是实现并发执行的重要手段。Thread类是 Java 提供的一个核心类,用于创建和管理线程。本文将总结Thread类的基本用法,并通过示例代码帮助读者掌握其核心功能。

m0_74750751的博客 1096

超详细neo4j安装教程

一、neo4j简介 最近开始学习知识图谱,所以首先想先学习一下neo4j的使用。 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。由于知识图谱中存在大量的关系型信息(实体—关系—实体), 使用结构化数据库进行存储将产生大量的冗余存储信息, 因此将图数据库作为知识图谱的存储容器成为流行的选择。当前较为常用的图数据库主要有 Neo4j 等。 二、neo4j的安装 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Co

qq_38335648的博客 9万+

【Java多线程编程】Thread类

本文讲解:Java多线程编程之Thread类、lambda表达式、start方法(启动线程)、sleep方法(休眠线程)、currentThread方法(返回当前线程的实例)、isInterrupted方法(标志位false)、Interrupted方法(标志位true)。

我的主页 2018

APM无人船测绘实战:从RTK、测深仪到图传的完整系统集成指南

本文提供了一套完整的APM无人船测绘系统集成实战指南。从RTK模块配置、测深仪数据同步到图传系统接入,详细解析了硬件选型、接线、软件参数调试及QGC地面站任务规划的全流程,旨在帮助用户将分散的部件整合为可自主执行水下地形测绘的可靠工具。

rr23456的博客 521

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK

从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。

chen286990651的博客 882

java多线程编程_Thread类_线程状态的理解

本节目标 学习java多线程编程! 了解java中的Thread类的基本使用! 掌握Thread创建线程对象的5种方法 学习Thread类中的一些常用属性和方法! Thread类 我们知道操作系统中的线程是并发执行的! 而Thread类是java给我们提供的一个类,通过Thread可以实现java并发编程!Thread类可以视为java标准库提供的API 创建好的Thread实例和操作系统的线程一一对应!!! Thread是在java.lang包下的类无需导入!!! 了解并发编程 publi

bug郭的博客 1645

Vofa+使用笔记(1):用Vofa+通过串口连接显示波形

1. 介绍 Vofa+有三种协议设置 rawdata:你发什么就显示什么,跟普通的串口助手一样 firewater:最简单在VOFA+里绘制波形的协议,建议仅在通道数量不多、发送频率不高的时候使用。 justfloat:有一定的数据格式,此协议非常适合用在通道数量多、发送频率高的时候。 2. 使用步骤 设置号下面三个地方,使用的协议以及传输的方式 拉出控件 (最开始上位机没有识别到你的数据的时候,右边是没有数据显示的,如果你想要y轴显示什么数据,右边设置显示也可以,右键波形图然后Y轴设置也行) 把进

苏释州的博客 5万+

java多线程编程,Thread,Runnable,Future相关知识

java多线程编程,Thread,Runnable,Future相关知识

ly969434341的专栏 515

[QMT量化交易小白入门]-七十六、从tick数据中获取高频交易的量价背离信号

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 794

还在用 RaiDrive/Rclone 挂载网盘?教您使用Windows 原生 WebDAV 丝滑直连 AList/Openlist,让你的网盘秒变本地硬盘!

网盘文件分散管理?😩 别再依赖第三方工具了!本文教你如何在 Windows 下,利用原生 WebDAV 功能,将 Openlist 网盘直接映射为本地硬盘!💻 操作简单,告别繁琐,让你的云端文件像本地文件一样丝滑!🚀 轻松实现高效管理,快来体验吧!

XiaoqiangClub的博客 2978

Java多线程编程之Runnable、Thread简介

在Java多线程编程中,常会遇到Runnable,Thread,Handler,这些对象往往让人感到困惑,现简单梳理下Java多线程编程的要点以及它们使用的区别。 一、描述任务的方式,Runnable接口     并发编程将程序分为多个任务,通过使用多线程机制来执行每个独立任务(子任务)。下面写个简单的程序说明Runnable使用的特点。 LiftOff.java package com.

蔡兵的专栏 699

uniapp - 实现PDA扫码枪RFID批量扫描读取示例代码,uni-app APP识别RFID(射频识别)结合硬件设备进行扫描,uniApp调用RFID读写通用方案适配各种设备+完整实例源码教程!

uni-app PDA 读取RFID,基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能,UniApp中的RFID实现,手持机 RFID插件(uni-app集成手持设备rfid插件),uniapp自动识别RFID,uni-app调RFID模块,uni-app RFID识别插件,uniapp读取rfid,uniapp手持设备扫描rfid,uniapp超高频rfid识别,rfid标签识别,uniapp调用RFID读写,uniapp rfid扫码枪,uniapp中如何使用rfid插件,打包上线后

🏆 前端领域优质创作者 1万+

Java中的多线程编程可以通过线程类Thread和线程接口Runnable实现。

执行程序时,调用Thread类的start()方法会启动一个新线程,并在新线程中执行run()方法。- 线程间通信:多个线程之间需要进行通信来协调工作,可以使用wait()、notify()、notifyAll()等方法实现。- 线程优先级:JVM通过线程调度器来控制程序中多个线程的执行顺序,可以使用setPriority()方法设置线程的优先级。多线程编程的目的是提高程序的并发性和效率,但是也需要谨慎处理线程同步和线程间通信等问题,以免导致线程安全问题和程序性能下降。

编程菜鸟的博客 262

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 993

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java 多线程 runnable thread_Java多线程编程(1)-Thread和Runnable

1.概念和示例代码进程是内存中运行的一个应用程序,是操作系统分配资源的最小单位。线程是进程中的一个执行流程,进程可以执行多个线程,线程总是属于某个进程,进程中的多个线程共享进程中的内存资源。为了更有效的完成任务和利用CPU资源,需要多线程操作,因而需要多线程编程。Java多线程编程的时候,可以继承于Thread对象,也可以实现Runnable接口。示例代码如下。publicclassMain...

weixin_35208812的博客 181

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java进阶教程,全面剖析Java多线程编程,多线程的实现方式,继承Thread类方式,笔记03

Java进阶教程,全面剖析Java多线程编程,多线程的实现方式,继承Thread类方式,笔记03

道友 816

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

多线程编程初探:Java Thread类与Runnable接口的实践

除了继承Thread类,还可以通过实现Runnable接口来创建线程,这种方式更符合面向对象编程中“组合优于继承”的原则,并且一个类可以同时实现多个接口,具有更高的灵活性。需要注意的是,直接调用run方法只是普通的方法调用,不会启动新的线程。Thread类是Java中用于创建和管理线程的核心类,通过继承Thread类并重写其run方法,可以定义线程的具体执行逻辑。在上述代码中,MyThread类继承自Thread类,并重写了run方法,run方法内的代码就是该线程要执行的任务。

2501_91651303的博客 467

【Java多线程编程: 使用Thread类和Runnable接口实现基本的并发编程】

Java多线程编程是现代软件开发中不可或缺的一部分。在多核CPU和云计算时代,利用多线程并发执行任务可以提高程序的性能和响应能力,从而提升用户体验和系统的可用性。作为一名Java开发人员,了解Java多线程编程的基本概念和最佳实践是非常重要的。本文将介绍Java多线程编程的核心组件Thread类和Runnable接口,并提供一些有用的技巧和经验。Thread类和Runnable接口是Java多线程编程的核心组件。它们都可以用于创建和启动线程,但有一些区别和优缺点。

qq_44095715的博客 322

Java多线程编程-Thread API (一)

Java多线程编程-Thread API Thread.currentThread()Thread.isAlive()方法Thread.sleep()方法Thread.getId()方法总结 Thread是Java实现多线程的关键类,Thread提供了先关的API,我们来说说相关的API,就从我们使用最多的开始说起。 Thread.currentThread() currentThread():返回对当前正在执行的线程对象的引用 源码: //调用native的方法 public static native

HQ DevJ的专栏 206

Java Thread类详解:多线程编程的利器

多线程编程在现代计算机应用中扮演着至关重要的角色,而Java作为一门强大的编程语言,提供了丰富的多线程支持,其中Thread类是多线程编程的核心。本文将深入研究Java中的Thread类,介绍其基本概念、创建和启动线程、线程同步、线程池等关键主题,帮助读者更好地理解和应用多线程编程,提高程序的性能和响应能力。例如,如果线程持有某个对象的引用,而该对象实际上已经不再需要,但由于线程的存在,该对象无法被垃圾回收,就会发生内存泄漏。在合适的时机,将不再需要的对象引用设置为null,帮助垃圾回收器回收这些对象。

程序猿小样的博客 366

2024年C C++最新java多线程编程_Thread类_线程状态的理解_java thread serial,带你一步一步深入Handler源码

我们知道操作系统中的线程是并发执行的!而Thread类是java给我们提供的一个类,通过Thread可以实现java并发编程!Thread类可以视为java标准库提供的API创建好的Thread实例和操作系统的线程一一对应!!!Thread是在java.lang包下的类无需导入!!!

2401_84973151的博客 867

Java 多线程编程:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口

Java 多线程编程:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口

李长渊的博客 1123

Java多线程编程:从Thread类入门到精通的艺术之旅

一、认识线程-Thread类1. Thread类的常见构造方法想象一下,Thread 就像一个魔法盒,不同的构造方法就像是开启这个盒子的不同钥匙。最常见的几把“钥匙”包括:(1) 无参构造方法:new Thread()这是最基础的创建方式,就像你拿到了一个未命名的魔法盒。你可以稍后通过重写 run() 方法给它赋予任务。输出结果:(2) 带任务的构造方法:new Thread(Runnable target)这种方式相当于在创建魔法盒的同时,直接给它指定了要执行的任务(比如跳舞或唱歌)。

m0_73517383的博客 936

探索Java多线程编程的艺术: `java-multi-thread-programming` 项目解析

探索Java多线程编程的艺术: java-multi-thread-programming 项目解析 在现代软件开发中,多线程已经成为提升效率和优化性能的关键技术之一。对于Java开发者而言,理解和掌握多线程更是必不可少的能力。今天,我们将深入研究一个开源项目——,这是一个面向初学者和进阶者的优秀资源,它提供了丰富的示例和讲解,帮助我们更好地理解和应用Java多线程。 项目简介 java-mult...

gitblog_00022的博客 506

(javaEE)多线程基础1: 进程和线程的联系和区别 。Java如何进行多线程编程?Thread 类及常见方法。

进程   1.进程具有独立性    ———— 虚拟地址空间 线程   为什么要引入多个线程?   多线程注意点   ⁜⁜总结:线程和进程的区别和联系⁜⁜ (经典面试题) Java如何进行多线程编程?   创建线程    ——方法1 继承 Thread 类    ——方法2 实现 Runnable 接口    —— 使用Runnable的写法 和 直接继承 Thread 有什么区别?    匿名内部类 方法     继承 Thread,重写run,但是使用匿

iiiiiihuang的博客 575
上一篇: Java基础篇—IO操作
下一篇: java—多线程编程 Thread
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值