Java中 synchronized 修饰符及其示例

Java 修饰符 abstract修饰符用于声明抽象类和抽象方法。抽象类不能被实例化,而抽象方法没有具体的实现,必须在子类中被重写。Java修饰符是Java编程语言的重要组成部分,它们用于控制类、方法、变量等成员的访问级别和其他性质。了解和正确使用Java修饰符对于编写高效、安全的Java程序至关重要。 阅读详情

      synchronized 关键字可用于声明方法,类和方法体,声明的目标同一时间只能被一个线程访问。

      用法如下,

      1. 修饰实例方法;

      2. 修饰类;

      3. 修饰代码块;

      4. 修饰静态方法。

public class SynchronizedTest extends Thread{
    public static int i;
    @Override
    public void run() {

    }
    public synchronized void computedInt(){ // 修饰实例方法
        synchronized (SynchronizedTest.class){  // 修饰类
            // ...
        }
        synchronized (this) { // 修饰代码块
            // ...
        }

    }
    public synchronized static void sumInt(){ // 修饰静态方法
        // ...
    }
}

 

如何在 SAP BTP 上通过 CDS view 快速创建 Fiori Elements 应用 本文基于 SAP Business Technology Platform 的 ABAP 编程环境进行的开发。 使用 ABAP Development Tool 登录 SAP BTP ABAP 编程环境,新建一个 package,命名为 Z_JERRY_CDS. 右键选中该 package,创建一个新的 Consumption view. 该视图是一个消费视图,它基于业务对象 (BO) 视图 /DMO/I_TRAVEL_U,提供了独立于消费层的给定数据模型。 它包含在其上运行的应用程序所需的所有核心信息。 阅读详情

相关推荐

SAP S/4HANA 物料分类账(ML)/实际成本核算(Actual Costing)——底表全景 & CKMLCP 执行后数据变化

插入 ML 重估凭证行项目:Dr/Cr 库存科目(期末库存调整)、Dr/Cr COGS/消耗科目(消耗重估)、Cr/Dr ML 重估抵消科目(PRY/PRV 类逻辑)also STPRS/VERPR/PEINH/LBKUM 等(但 S/4 很多“真理”在 ACDOCA)MLPP / MLPPF / MLCR / MLCRF / MLCD / CKMLMV003/004 等。Material Ledger Document(行项目明细:收货/发票价差/结算写入/重估相关)间接(PUP在CKMLCR;

weixin_52203666的博客 587

Java中Synchronized的四种用法

java中Synchronized的四种用法,修饰代码块、修饰方法、修饰静态方法、修饰类

Isonion的博客 6015

PCIE协议版--M.2接口规范V1.0中文版1——物理规格篇

5.1.3.双模块键模块:同时支持Socket1-DP、Socket1-SD。2.4.7.3.3.双面模块(使用H2.8、H3.2、H4.2连接器)6.5.8.2.5.热设计功率响应-带有风扇类别的薄平台笔记本电脑。2.3.7.1. Socket1&2射频连接器PIN-OUT。5.2.2.Socket2 PIN-OUT(机械KEY B)3.2.10.1.3.极薄的笔记本电脑的电源开关顺序的例子。5.1.1.Socket1-DP(机械KEY A)5.1.2.Socket1-SD(机械KEY E)

想你所想,做你所做 4680

synchronized修饰方法

文章目录前言一、Synchronized修饰非静态方法二、Synchronized修饰静态方法三、类锁和对象锁的访问是不冲突的四、总结 前言 直接说结论: 1.Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。 2.Synchronized修饰静态方法,实际上是对该类对象加锁,俗称“类锁”。 3.对于类锁synchronized static,是通过该类直接调用加类锁的方法,而对象锁是创建对象调用加对象锁的方法,两者访问是不冲突的,对于同一类型锁锁住的方法,同一对象是

with_luck的博客 6494

告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置

本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。

yog99的博客 498

通过 CoovaChilli 和 FreeRADIUS 搭建一个公共 Wi-Fi 的认证系统,实现用户连接到 Wi-Fi 后通过 Captive Portal(强制登录页面)进行认证

要实现固定设备连接的功能,你可以通过MAC 地址认证来限制哪些设备可以通过 FreeRADIUS 进行身份验证和连接。你可以在 FreeRADIUS 的users文件中直接配置允许的设备的 MAC 地址,也可以通过数据库存储和查询设备信息,进一步提高管理效率。通过这些方法,你可以灵活地控制哪些设备能够访问你的 Wi-Fi 网络。

m0_69943017的博客 2650

Synchronized 用法和底层原理

一、对象锁和类锁 1. 对象锁 在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。 2. 类锁 在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所...

数据与算法架构提升之路专栏 2802

ROS机器人全覆盖路径规划实战:6种ipa算法对比与选型指南(附避坑经验)

本文深入对比了ROS中ipa_coverage_planning功能包集成的6种全覆盖路径规划算法,包括牛耕分解、栅格旅行商、神经网络、局部能量最小、轮廓线和凸感知放置。文章从覆盖率、重复率、计算效率、动态避障等核心工程指标出发,提供了基于不同场景(如静态/动态环境、规则/复杂布局)的实战选型指南,并分享了神经网络和局部能量最小等关键算法的参数调优与避坑经验,旨在帮助开发者根据实际需求选择并优化最合适的ipa覆盖算法。

perl8的博客 364

Synchronized

悲观锁在Java中有两种典型的实现方式,一种是基于Object Monitor模式的资源操作方式,另一种是基于AQS技术的资源操作方式。他们共同的特点需要操作者获得资源的独占操作权才能对相关资源进行操作。补充:乐观锁思想该思想假设,并不是任何时候都有两个或多个操作者同时操作相同的资源,从而产生操作冲突。该思想还假设,即使操作结果存在错误也没有关系。可以通过对比预期值和实际值来确认操作的正误,如果出现错误,则放弃本次操作,重新操作即可。

Blue_Pepsi_Cola的博客 647

智能网联汽车云控系统核心解析:车云数据交互协议设计与实践

本文深入解析了智能网联汽车云控系统的核心——车云数据交互协议的设计与实践。文章围绕“说什么”、“怎么说”及异常处理三大核心问题,详细阐述了二进制与结构体数据类型定义、TCP/UDP双通道传输机制、通用报文格式以及典型交互流程(如GLOSA车速引导),并分享了时间同步、坐标系定义等关键实战经验与避坑指南,为构建高效、可靠、安全的车云“神经系统”提供专业指导。

alice7model的博客 121

用 ABAP 驾驭 OAuth 2.0:从 Authorization Code 到 SAML Bearer 的全栈落地指南

ABAP平台OAuth 2.0客户端开发实践 本文为SAP开发者详细解析ABAP平台内置OAuth 2.0客户端的使用方法,涵盖四种授权流的最佳实践: 授权流选择: Authorization Code:适用于用户交互场景 SAML 2.0 Bearer:适合已有SAML体系的企业 Client Credentials:系统间通信 Password Credentials:过渡方案(不推荐) 配置流程: 通过SE80定义Client Profile 使用SOAUTH2_CLIENT/OA2C_CONFIG配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 309

synchronized三种修饰方法

实例方法同步:锁定当前对象实例(this),适用于多个线程操作同一对象实例的场景。静态方法同步:锁定类的Class对象,适用于控制静态资源访问的场景,影响该类的所有实例。代码块同步:可以灵活选择锁对象(任意对象或Class对象),提供细粒度控制,适用于需要同步部分代码的场景。选择哪种同步方式取决于你的具体需求,例如需要同步的资源是属于实例级别还是类级别,以及是否需要对同步的范围进行细粒度控制。

weixin_45826598的博客 1398

信息传输仿真:卫星通信系统仿真_(12).基于SystemVue的卫星通信仿真

SystemVue是Cadence公司开发的一款用于系统级设计和仿真的软件工具。它主要用于无线通信系统的设计和验证,特别是在卫星通信、雷达、射频和微波通信等领域。SystemVue提供了一个集成的环境,用户可以通过拖拽和连接各种预定义的模块来构建复杂的通信系统模型,从而进行性能分析和优化。

2401_87715305的博客 1370

关于java中synchronized的迷思,建议只作为函数修饰符使用

讲到 java 中synchronized关键字的话,是一个临界区的标识符,java代码在多线程进入此区块的时间必须是串行的。     以前在自己写一个培训文档中也讲过多线程应该是源于单线程,并行源于串行,简单的来说,可以认为所有从main开始,就生了万物!      由于synchronized这个特性一些书籍或网页上文字介绍synchronized的使用尽可能地少和短,多线程经常走走停停,

一把菜刀行江湖 1423

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

详解java修饰符synchronized

这里通过列举可能碰到的synchronized使用方式来讲解 1.这种情况,不同线程同一对象调用两个方法是冲突的。但是同一对象调用同一方法,a处不冲突,b处冲突。 String s1 = ""; String s2 = ""; public void print1(){ a; synchronized(s1){ ...

xiao_programmer的博客 1024

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java基础 第二篇 接着讲synchronized修饰符与volatile修饰符

synchronized(同步 英译):一次只能有一个线程访问; volatile(易变的不稳定的 英译):被修饰的变量每次变换时或者每次被线程访问时都会强制要求其回到!共享!内存中修改值,保证所有线程同时能知道这个值的变化。再往(多线程线程模型 : 主存,线程栈)每当线程处理完数据后都会把值从主存load到方法栈,完成后再save回去,(volatile关键词的作用:每次针对该变量的操作都激发...

qq_38983577的博客 464

深度学习工具包 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多线程中 synchronized 修饰符的用法

修饰代码块 private Object obj = new Object(); public void method1(){ //对代码块加锁,用一个对象作为锁 synchronized (obj){ } } 修饰方法(本质是对 this 对象加锁) public synchronized void method2(){ //对方法加锁,实际上是对this对象加锁 } 对 this 对象加锁 public void method3(){ synchronize

Kaysen的博客 1064

Java:synchronized修饰符在静态方法与非静态方法上的区别

Java:synchronized修饰符在静态方法与非静态方法上的区别 synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。public class StaticSynDemo {private static String a="test";//等同于方法print2public synchronized void pri...

zhangwei8607的博客 552

Java常见修饰符

修饰类和方法。

duehebfbf的博客 2442

Java修饰符

/将输出一个错误 } }class AudioPlayer { protected boolean openSpeaker(Speaker sp) { // 实现细节 } } class StreamingAudioPlayer extends AudioPlayer { protected boolean openSpeaker(Speaker sp) { // 实现细节 } },用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

weixin_48345177的博客 1062

JAVA 三个修饰符笔记

访问修饰符与非访问修饰符可组合,如 public static final 修饰常量(如 public static final int DEFAULT_SIZE = 10;private ✔️ ❌ ❌ ❌ 仅当前类可见,常用于封装属性,强制通过 getter/setter 访问。public ✔️ ✔️ ✔️ ✔️ 完全公开,任何类都可访问,常用于对外提供服务的类、方法或属性。// 同包或子类可见。- 作用:使成员(属性/方法)属于类本身,而非实例对象,可通过类名.成员直接访问。

2502_90978783的博客 580

synchronized 修饰符的使用

是 Java 的同步关键字,通过对象锁保证多线程下代码块的原子性,用于解决线程安全问题。intern()是字符串的池化方法,确保相同内容的字符串共享常量池中的同一引用,避免锁对象不一致导致的同步失效。字符串常量池是内存优化机制,通过去重减少重复对象的内存占用。代码中使用是为了确保同一用户的不同线程锁定同一对象,实现“一人一单”的线程安全控制;不加intern()会导致锁失效,引发并发问题。

2303_76837797的博客 1071

java线程变量修饰符_Java的类,方法,变量等等的默认修饰符是什么

展开全部访问控制修饰符Java中,可以使用访问控制符来保护对类32313133353236313431303231363533e78988e69d8331333337393535、变量、方法和构造方法的访问。Java支持4种不同的访问权限。默认的,也称为default,在同一包内可见,不使用任何修饰符。私有的,以private修饰符指定,在同一类内可见。共有的,以public修饰符指定,对所有类可...

weixin_42320332的博客 175

Java三个修饰符

在Java中,修饰符用于限定类、属性、方法的访问权限或特性,主要分为访问修饰符和非访问修饰符。- volatile (易变修饰符):保证多线程环境下变量的可见性,禁止指令重排序(常用于标记共享变量)。- 作用:修饰的成员(属性、方法)属于类本身,而非实例对象,可通过 类名.成员 直接访问。- 静态方法:不能直接访问非静态成员,常用于工具类(如 Math.sqrt() )。- 修饰方法:抽象方法仅有声明,没有实现(需用 abstract 关键字声明)。// 子类可跨包访问。

HELLO__l的博客 442

java第五课 访问修饰符和非访问修饰符

目录 访问控制修饰符 非访问修饰符 static修饰符 final修饰符 abstract修饰符 synchronized修饰符 transient修饰符 volatile修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 (4种) 非访问修饰符(6种) 访问控制修饰符 默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以pri...

Birdlun的博客 694

Java的三个修饰符

例: public class MyClass {} public void method() {}。- 例: class DefaultClass {} void defaultMethod() {}。- 修饰类:不能被继承(如 final class MathUtil {} )。- 修饰方法:不能被重写(如 final void print() {} )。- 修饰类:抽象类,不能直接实例化,需子类继承并实现抽象方法。- 修饰方法:抽象方法,只有声明无实现,必须由子类重写。

Raven_Lcl的博客 314
上一篇: Spring 中@NonNull、@NonNullApi、@NonNullFields以及@Nullable注解及其示例
下一篇: Java的volatile关键字及其示例
小鸡炖蘑菇Plus版
博客等级 码龄10年 10粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值