c++存储类

C++ 存储类

存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类:

  • auto
  • register
  • static
  • extern
  • mutable
  • thread_local (C++11)

从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。

auto 存储类

自 C++ 11 以来,auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。

C++98标准中auto关键字用于自动变量的声明,但由于使用极少且多余,在 C++17 中已删除这一用法。

根据初始化表达式自动推断被声明的变量的类型,如:

auto f=3.14;      //double
auto s("hello");  //const char*
auto z = new auto(9); // int*
auto x1 = 5, x2 = 5.0, x3='r';//错误,必须是初始化为同一类型

register 存储类

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。

{
   register int  miles;
}

寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 'register' 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。

static 存储类

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

在 C++ 中,当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。

实例

#include <iostream>
 
// 函数声明 
void func(void);
 
static int count = 10; /* 全局变量 */
 
int main()
{
    while(count--)
    {
       func();
    }
    return 0;
}
// 函数定义
void func( void )
{
    static int i = 5; // 局部静态变量
    i++;
    std::cout << "变量 i 为 " << i ;
    std::cout << " , 变量 count 为 " << count << std::endl;
}

当上面的代码被编译和执行时,它会产生下列结果:

变量 i 为 6 , 变量 count 为 9
变量 i 为 7 , 变量 count 为 8
变量 i 为 8 , 变量 count 为 7
变量 i 为 9 , 变量 count 为 6
变量 i 为 10 , 变量 count 为 5
变量 i 为 11 , 变量 count 为 4
变量 i 为 12 , 变量 count 为 3
变量 i 为 13 , 变量 count 为 2
变量 i 为 14 , 变量 count 为 1
变量 i 为 15 , 变量 count 为 0

extern 存储类

extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 'extern' 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候,如下所示:

第一个文件:main.cpp

实例

#include <iostream>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

第二个文件:support.cpp

实例

#include <iostream>
 
extern int count;
 
void write_extern(void)
{
   std::cout << "Count is " << count << std::endl;
}

在这里,第二个文件中的 extern 关键字用于声明已经在第一个文件 main.cpp 中定义的 count。现在 ,编译这两个文件,如下所示:

$ g++ main.cpp support.cpp -o write

这会产生 write 可执行程序,尝试执行 write,它会产生下列结果:

$ ./write
Count is 5

mutable 存储类

mutable 说明符仅适用于类的对象,这将在本教程的最后进行讲解。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。

thread_local 存储类

使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

thread_local 说明符可以与 static 或 extern 合并。

可以将 thread_local 仅应用于数据声明和定义,thread_local 不能用于函数声明或定义。

以下演示了可以被声明为 thread_local 的变量:

thread_local int x;  // 命名空间下的全局变量
class X
{
    static thread_local std::string s; // 类的static成员变量
};
static thread_local std::string X::s;  // X::s 是需要定义的
 
void foo()
{
    thread_local std::vector<int> v;  // 本地变量
}
本文转载于网络 如有侵权请联系删除

相关文章

  • 浅谈中高级接口测试面试现状

    最近可能很多人觉得接口测试火了起来,其实早在15年,就已经有很多人在做接口测试了,只不过那时候自动化少一些。比如我是用postman去手动测试接口,。为啥近两年来接口测试大火了呢?因为很多公司的技术管理者觉得接口测试,以其更早的介入测试,分层测试的角度来看,可以大大减少修改bug的成本,也就是性价比很高,然后也成为了测试左移的主要落实方式。那么接口测试自动化为什么会大火呢?相比较ui自动化来说,接口自动化技术稳定性更高,维护成本低,执行速度快,发现的问题更深刻。所以技术管理者们又觉得接口自动化应该要搞起来,起码比ui自动化要合适。那么来说说面试:如果你是经过了简单的培训和自学后,去面试中高级服务端测试,那么很有可能遇到以下对话。这一点,就是某些职业培训机构的定位迷惑。给大家简单说个面试缩影:老师:我们这一套接口测试课程,只卖999,月薪过万拿到手。小白:太好了!我报名!老师:第一节:什么是python,python怎么写helloworld第二节:什么是接口,postman怎么用,json是什么样的第三节:requests模块怎么调用,用python发送一个http请求好了,课程结束了

  • Python循环控制(上)

    一.比较符和算术操作符一样,布尔操作符也有操作顺序。在所有算术和比较操作符求值后,Python先求值not操作符,然后是and操作符,然后是or操作符。二.if控制ifname=='ad':print('aa')elifname=='asd':print(asd)else:print('other')if(xx==xx)and(yy==yy):#一起

  • Android ListView实现图文列表显示

    本文实例为大家分享了AndroidListView实现图文列表显示的具体代码,供大家参考,具体内容如下目标效果:ListView如果内容过多,可以滑动屏幕来显示,并且点击某一行可使用吐司方法弹出对应的水果名字。1.新建项目,新建entity实体类包,包中建存储每行水果信息的Fruit类。Fruit.java页面:packagecom.example.entity; publicclassFruit{ privateintimageId;//使用id锁定水果图片 privateStringimageName;//对应的水果名字 publicFruit(intimageId,StringimageName){ super(); this.imageId=imageId; this.imageName=imageName; } publicintgetImageId(){ returnimageId; } publicvoidsetImageId(intimageId){ this.imageId=imageId; } publicStringgetImageName(){ returni

  • 使用QEMU模拟树莓派Raspberry Pi

    树莓派 被誉为“世界上最流行最便宜的小型电脑”的「树莓派」RaspberryPi是一款性价比超高的迷你电脑主机(仅有信用卡大小),深受全球开发者、极客、技术爱好者们的追捧和喜爱树莓派可以安装多种Linux系统发行版(官方为Debian的衍生版),可当服务器搭建各种网站、应用服务来使用,也能用来学习编程、控制硬件或日常办公。由于树莓派的体积很小很轻,并且功能极其丰富强大,这也使得它的应用范围和潜力几乎是无限的下面介绍在之前的编译安装Qemu5.1的文章基础下安装raspberrypi树莓派Fedora32下编译安装Qemu5.1并创建ARM版本Linux虚拟机1、下载树莓派系统最新版本下载地址http://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/2020-02-13-raspbian-buster.zip2、下载kernel-qemuhttps://github.com/dhruvvyas90/qemu-rpi-kernel下载如下这两个文件kernel-qemu-4.19.50-busterversat

  • MySQL业务双活的初步设计方案

    这是学习笔记的第2142篇文章在之前设计两地三中心方案时,提到了一个方案,在文章发布后收到了很多朋友的反馈,当然这个事情不是拍脑袋想的,我们最近在落实这件事情。我们先来看下之前的一个简略版设计,这是基于分布式设计方案,可以引入数据组件syncer和writer,实现机房多活的业务需求,syncer和writer为数据的发布者和消费者,基于分布式协议进行处理。在处理过程中有三类关键技术:1)数据的处理基于分布式ID,能够唯一定位数据处理操作,并且该操作具备递增趋势。2)同步组件的稳定性,同步组件可以理解为一种通用服务,需要考虑不同机房间的数据延迟和数据冲突处理机制,保证同步组件服务的稳定,高效。3)同步组件的高可用,对于同步组件需要根据业务特点做权重处理,考虑不通IDC的业务情况,并重点考虑同步组件的数据冗余设计,保证发生异常时能够及时恢复数据。此种方案短期内难以实现,但是长期来看,可以支持机房多活,业务价值更高。当然在具体设计的时候,其实有很多现实的问题摆在面前,在经过了几次讨论和各个技术方向的对接讨论后,我设计了如下的方案。我来做下解释,首先对于机房多活来说,我们设定的这个场景是源端

  • win2012 R2的ntp时间同步设置解析

    NTP时间同步是一种时间同步网络技术。目前有多种时间同步技术,每一种技术都各有特点,不同技术的时间同步精度也存在较大的差异.常用同步技术时间同步技术 准确度    覆盖范围短波授时   1~10毫秒  全球长波授时   1毫秒    区域GPS     5~500纳秒  全球电话拨号授时 100毫秒   全球互联网授时(NTP)1~50毫秒全球SDH传输网授时100纳秒   长途另外,还有两个相对简单的、低精度的互联网时间协议:Time协议(RFC868)和Daytime协议(RFC867),可以提供1s校准精度的广域网时间同步。在win2012R2版本里,没有了internet互联网时间,需要使用另外的方式去做时间同步可以分几种场景:一、没有Windows域环境集群中的每个服务器首先都要能上网,每个服务器需要执行下面的操作开启NTPClient服务1、打开命令行终端,输入:gpedit.msc,打开组策略管理器2、按照如下路径计算机配置\管理模板\系统\windows时间服务\时间提供程序找到服务器设置文件3、双击配置WindowsNTP客户端 4、将NtpServer项,输入将要同

  • 正则表达式真的很骚,可惜你不会写!

    正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外星文似的字符串,替代了你用一大篇幅的ifelse代码来做一些数据校验。既然喜欢,那就动手学呗,可当你百度出一一堆相关资料时,你发现无一不例外的枯燥至极,难以学习。本文旨在用最通俗的语言讲述最枯燥的基本知识!1.元字符万物皆有缘,正则也是如此,元字符是构造正则表达式的一种基本元素。 我们先来记几个常用的元字符:元字符说明.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配任意的空白符\d匹配数字\b匹配单词的开始或结束^匹配字符串的开始$匹配字符串的结束有了元字符之后,我们就可以利用这些元字符来写一些简单的正则表达式了, 比如:匹配有abc开头的字符串:1\babc或者^abc复制匹配8位数字的QQ号码:1^\d\d\d\d\d\d\d\d$复制匹配1开头11位数字的手机号码:1^1\d\d\d\d\d

  • 将Chrome调试器里的JavaScript变量保存成本地JSON文件

    我写了一个系列的文章,主要用来搜集一些供程序员使用的小工具,小技巧,帮助大家提高工作效率。推荐一个功能强大的文件搜索工具SearchMyFiles介绍一个好用的免费流程图和UML绘制软件-DiagramDesigner介绍Windows任务管理器的替代者-ProcessExplorer介绍一个强大的磁盘空间检测工具SpaceSniffer如何在电脑上比较两个相似文件的差异程序员工作效率提升系列-推荐一个JSON文件查看和修改的小工具我们在Chrome开发者工具的Console标签页里,可以输入JavaScript变量然后回车,查看这些变量的值。比如我用类jQuery选择器的语法varbutton=$(‘button’)来返回当前页面所有button标签的实例。如果我想将这个变量保存到本地,以备以后进一步分析,一种做法是用JSON.stringfy将其序列号成JSON字符串,然后再手动选中该字符串,新建一个本地文件,复制进去并保存。这套办法可行但是太麻烦了。现在我向大家分享一种自动化的做法。(function(console){console.save=function(data,fil

  • 全球计算机视觉顶会CVPR 2019论文出炉:腾讯优图25篇论文入选

    全球计算机视觉顶级会议IEEECVPR2019(ComputerVisionandPatternRecognition,即IEEE国际计算机视觉与模式识别会议)即将于6月在美国长滩召开。本届大会总共录取来自全球论文1299篇。中国团队表现不俗,此次,腾讯公司有超过58篇论文被本届CVPR大会接收,其中腾讯优图实验室25篇、腾讯AILab33篇,相比过去两年成绩大幅提升。作为计算机视觉领域级别最高的研究会议,CVPR2019录取论文代表了计算机视觉领域在2019年最新和最高的科技水平以及未来发展潮流。CVPR官网显示,今年有超过5165篇的大会论文投稿,最终录取1299篇。这些录取的最新科研成果,涵盖了计算机视觉领域各项前沿工作。2019年腾讯公司有超过58篇论文被本届CVPR大会接收,其中腾讯AILab33篇、腾讯优图实验室25篇。而2018年总计被收录31篇,2017年被收录18篇。2019年的录取数量相比前两年都有大幅提高,成绩斐然。腾讯此次被收录的论文涵盖深度学习优化原理、视觉对抗学习、人脸建模与识别、视频深度理解、行人重识别、人脸检测等热门及前沿领域。全球领先的科研成果,展示了

  • 获谷歌爱奇艺投资,触手会改变游戏直播市场格局吗?

    正如我此前所言,2018年是直播行业的分水岭,“百播大战”结束,直播市场正在向头部集中,特别是游戏直播市场,这个现象更加明显。在虎牙直播IPO后,种种迹象显示游戏直播市场竞争已接近尾声,不过,现在看来,游戏直播市场依然存在变数。 日前,手游直播起家的触手直播首次透露,爱奇艺参与了其D轮融资。这轮融资发生在今年1月,当时触手直播宣布获得了来自谷歌领投的1.2亿美元D轮融资,谷歌在中国市场投资凤毛麟角,其投资触手直播使得直播圈大为震动。当时,由于爱奇艺处于上市缄默期,所以虽然钱早已到账,触手却一直秘而不宣。百度在爱奇艺持股69.6%,这意味着触手直播成为唯一一家同时拥有谷歌和百度系资本的公司,触手并未透露爱奇艺投资的具体金额,不过,触手CMO杨淑玉对36kr透露,上一轮融资估值在5亿美元,触手正在进行新一轮融资,估值将超过10亿美元,触手新一轮融资也将很快公布。 在直播特别是游戏直播市场看上去鏖战即将结束时,触手直播却接连融资,无疑给市场增添了更多变数。游戏直播下半场7月11日,映客上市,与早前上市的欢聚时代、陌陌、天鸽互动和虎牙构成了直播五虎,未上市的公司融资变难,如果没有足够强的利润获

  • Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

    11.0.原理介绍django 一个基于python的开源web框架uwsgi 一是一个web服务器,也可以当做中间件nginx常用高性能代理服务器wsgi.pydjango项目携带的一个wsgi接口文件nginxNginx是一个Http和反向代理服务器 什么是反向代理服务器呢? 正向的就是由浏览器主动的想代理服务器发出请求,经代理服务器做出处理后再转给目标服务器 反向的就是不管浏览器同不同意,请求都会经过代理服务器处理再发给目标服务器 这其中的区别就是必须经过Nginx反向代理服务器,这就有了使用Nginx的几个好处: 安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器 负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能 提高web服务器的IO性能:这个我也没看懂,总结来说就是请求从客户端传到web服务器是需要时间的, 传递多长时间就会让这个进程阻塞多长时间,而通过反向代理,就可以在反向代理这完整接受请求,然后再 传给web服务器,从而保证服务器性能,而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理,不经

  • 2-学习GPRS_Air202(Air202开发板介绍和下载第一个程序)

    http://www.cnblogs.com/yangfengwu/p/8887933.html资料链接链接:https://pan.baidu.com/s/1968t2QITuxoyXlE_NzGvdA密码:yj7w自己的开发板做了做了第一版测试后做了一些调整第一个拨码开关是CH340和Air202的两个串口通信第二个拨码开关是单片机和CH340,Air202的串口1通信第三个拨码开关是WIFI模块和CH340,51单片机通信拨码开关的最后一个都没有接,是让通信有空余的引脚,防止串虽然自己那天直接一开始就使用的MQTT连接了自己的服务器然后和手机进行了通信,但是自己没有多余的手机卡,就不先演示直接远程通信了,我不敢用现在用的手机卡,,因为很久以前搞SIM900A把自己手机卡搞坏了。。等我同学回来用他买的流量卡,现在下载第一个程序打开下载的软件我也是现学现卖。。。遇到问题解决问题。。先看一下教程上说的 我先用LUA开发,因为足够的灵活足够的简单 其实现在想知道 不同的lod,有什么不同,我应该下载哪一个呢。。。。我就找找(以前看见过忘了在哪里了)找了好久,,突然。。看见可以点击完了自己

  • ThinkJS 简介

    简介最近几年,前端技术呈现出突飞猛进的发展,涌现出了一大批优秀的前端框架,今天给大家带来的就是基于node的一款优秀的优秀的前端框架。之前一直用Express来搭建比较简单的Node应用,但是对于相对复杂的应用来说,Express还是太轻量了。而作为一款优秀的国产前端框架,ThinkJS整合了大量的项目最佳实践,让企业级开发变得更加简单、高效。从3.0开始,框架底层基于Koa2.x实现,兼容Koa的所有功能。在最新的版本中,ThinkJS全面支持ES6和ES7的语法规则。特性基于Koa2.x,兼容middleware内核小巧,支持Extend、Adapter等插件方式性能优异,单元测试覆盖程度高内置自动编译、自动更新机制,方便快速开发使用更优雅的async/await处理异步问题,不再支持*/yield从3.2开始支持TypeScript架构模型ThinkJS的架构模型如下: 环境搭建借助ThinkJS提供的脚手架,可以快速的创建一个项目。需要注意的是使用ThinkJS框架需要Node6.x以上环境的支持。大家ThinkJS环境需要用到如下的步骤:安装ThinkJS命令npminsta

  • [转]Bulk Update the Value of a System Field on Jira Issues

    本文转自:https://library.adaptavist.com/entity/bulk-update-the-value-of-a-system-field-on-jira-issues Overview UsethisscriptintheScriptConsoletoupdatethevalueofasystemfieldforallissuesreturnedbyaJQLquery. Example Asaprojectmanager,Iwanttomodifythedescriptionofasetofsimilarissuesinaproject.Withthisscript,Icaneasilybulkchangealloftheseissuedescriptionsautomatically,savingmetimeandreducingtheriskofhumanerror.   importcom.atlassian.jira.component.ComponentAccessor importcom.atlassian.jira.issue.s

  • jmeter传入字符时文本显示乱码

    1、使用CSVDataSetConfig组件传入参数,当传入的是字符串时,显示乱码  百度查看答案有用如下:  

  • 静态路由高级特性之bfd联动;下一跳地址为非直连网络,递归路由

    网络拓扑如下: 目的:在R3、R4上配置环回地址,模拟身后的网络,3.3.3.3访问4.4.4.4的时候走主链路,通过使用bfd工具检测主链路的网络联通性,当故障后可以自动切换到备份链路上,使网络无缝切换保障网络高可用性 递归路由大前提:配置静态路由不要写出接口,不要写出接口,不要写出接口,否则不会进行递归查表转发   首先在R1、R2、R3、R4接口配置地址和静态路由: R1: sysnameR1 interfaceGigabitEthernet0/0/0 ipaddress100.1.1.1255.255.255.0 interfaceGigabitEthernet0/0/1 ipaddress200.1.1.1255.255.255.0 iproute-static3.3.3.3255.255.255.255GigabitEthernet0/0/0100.1.1.3 iproute-static4.4.4.4255.255.255.255GigabitEthernet0/0/1200.1.1.4复制   R2: sysnameR2 interfac

  • itest(爱测试) 开源接口测试,敏捷测试管理平台10.0.0GA 发布

    一:itestwork简介       itestwork开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测,又有丰富的统计分析,8合1工作站。可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG,接口)来组织测试工作,也有测试环境管理,还有很常用的测试度量;对于发版频繁,需求常变,itest还可导出用例,线下修改、执行,新增后再导入(同步)到线上;且可根据测试策略来设置测试流程,并可实时调整;在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,也支持在线web思维导图写用例。让测试变得简单、敏捷,“好用、好看,好敏捷”,是itestwrok追求的目标。概念及功能模型如下:    官网 http://www.itest.work 在线体验1 http://www.itest.work/demo 在线体验2 http://120.78.0.137/demo v10.0.

  • redis主从配置

    分别在内网网址为192.168.1.1和192.168.1.2两台已经安装了redis的服务器做主从,其中1为主服务器,2为从服务器。 主服务器的操作: 1.修改配置 vim/usr/local/redis/redis.conf daemonizeyes#一般在128行,将no改为yes requirepassRedis#一般在第480行,设置密码 bind0.0.0.0#将默认的bind127.0.0.1修改,表示监听所有地址,也可以修改为192.168.1.2,表示只监听从服务器的地址复制 2.带配置文件启动redis服务 #如果有运行中的redis,就先将其服务停掉,再执行下面命令 /usr/local/redis/bin/redis-server/usr/local/redis/redis.conf复制   从服务器的操作: 1.修改配置 vim/usr/local/redis/redis.conf daemonizeyes slaveof192.168.1.16379#一般在265行,取消掉注释,修改ip即可 masterauthRedis#一般在272行

  • (转)常用的算法设计与分析-一夜星辰的博客

    算法设计与分析 分治法 思想 1.将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 2.divide-and-conquer(P) { if(|P|<=n0)adhoc(P); dividePintosamllersubinstancesP1,P2...,Pk; for(inti=1;i<k;i++) { yi=divide-and-conquer(Pi); } returnmerge(y1,y2...,yn); } 3.如何划分子问题 -集合论,找到一个原来集合问题的一个划分,子问题之间不相交,同时子问题的规模类型相同 -最优子结构(子问题类型相同) -最好使子问题的规模大致相同,即将一个问题的大小分成相等规模的k个子问题的处理方法是行之有效的。复制 例子 1.fibonacci数列 2.排列问题 3.整数划分问题 4.Hanoi塔问题 5.二分搜索 6.大整数乘法 7.Strassen矩阵乘法 8.合并排序 9.快速排序复制 复杂度分析 主定理:T(n)=aT(n/

  • 买卖股票的最佳时机

    #include"stdafx.h"#include"iostream"usingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){ intmin,A[5]; inti,max=1,j; for(i=0;i<5;i++) { cin>>A[i]; } for(i=0;i<5;i++) { min=A[i]; if(A[i]>max) { j=A[i]-min; } if(j>max) { max=j; } } cout<<max; return0;}

  • elastic job will never fire

    1.描述 2018-08-2018:11:01.912[Thread-8]INFO org.quartz.impl.StdSchedulerFactory-UsingdefaultimplementationforThreadExecutor2018-08-2018:11:01.912[Thread-8]INFO o.quartz.core.SchedulerSignalerImpl-InitializedSchedulerSignalleroftype:classorg.quartz.core.SchedulerSignalerImpl2018-08-2018:11:01.913[Thread-8]INFO org.quartz.core.QuartzScheduler-QuartzSchedulerv.2.2.1created.2018-08-2018:11:01.913[Thread-8]INFO c.d.d.j.l.i.s.JobShutdownHookPlugin-RegisteringQuartzshutdownhook.2018-0

相关推荐

推荐阅读