- jdbc连接池怎么工作
烟雨国度
java数据库服务器
是否是否是否开始初始化DruidDataSource应用程序请求连接ThreadLocal中有连接?返回ThreadLocal中的连接从连接池获取新连接将连接存入ThreadLocal执行SQL操作调用closeAll()是否自动提交?归还连接到连接池从ThreadLocal移除连接保持连接不变结束开始事务操作调用begin()设置自动提交为false执行多个SQL操作事务是否成功?调用commi
- 跨线程参数传递TransmittableThreadLocal
小玉起起
javajucjava开发语言
TransmittableThreadLocal是阿里巴巴开源的transmittable-thread-local库提供的一个类,它是ThreadLocal的一个增强版本,主要用于解决跨线程传递ThreadLocal变量值的问题。通常情况下,ThreadLocal变量的值只能在当前线程中共享,而无法在线程之间传递。但在一些特殊情况下,比如使用线程池时,任务可能会在不同的线程中执行,这时就需要一种
- 牛客错题集3,前端开发结构
卖家导航
程序员oracle数据库
在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLocal,值为就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get方法之前要先set,否则就要重写initialValue()方法。ThreadLocal的使用场景:数据库连接:在多线程中,如果使用懒汉式的单例模式创
- 初探ThreadLocal
祥哲
java多线程内存泄漏
一、ThreadLocal是干什么的ThreadLocal是用来在多线程时存储线程内部的局部变量,各个线程之间的变量是独立的不会相互影响。(个人理解为以当前线程为key,以变量为value存储变量)二、基本使用空参构造,创建ThreadLocal对象。publicvoidset(Tvalue)设置当前线程绑定的局部变量publicTget()获取当前线程绑定的局部变量publicvoidremov
- ThreadLocal原理
有什么奇怪!
#SSM#JUCjava大数据threadLocal
文章目录1、ThreadLocal简介2、ThreadLocal和Synchronize的区别3、ThreadLocal源码理解3.1Thread与ThreadLocalMap3.2ThreadLocal3.2.1ThreadLocal的set()方法3.2.2ThreadLocal的get()3.2.3ThreadLocal的remove()4、ThreadLocal常见使用场景5、Thread
- ThreadLocal
血莲丹
JAVA基础java多线程内存泄漏ThreadLocal
简介 我们都知道,多线程情况下,是会有资源竞争问题。当并非访问某共享资源时,就会出现问题,尤其是写操作,程序猿一般通过同步锁机制来保证线程安全。而当我们需要为每一个线程都保存一份线程独有的数据时,即相当于将共享变量变为每个线程都有一份的私有变量,就可以使用到ThreadLocal。 ThreadLocal位于java.lang包下,是JDK提供的一个类,支持泛型的。该类的作用就如其名字一样,线
- ThreadLocal内存如何释放
风吹吹2
javajava
是ThreadLocal是web中线程中存储变量传送数据的神奇,因为web中每个请求都一个是线程,所以可以理解为一次请求到结束都是可以在ThreadLocal中存储获取的(不包括异步、响应式webflux),因为他们整个请求不是在同一线程#ThreadLocal那么原理是什么#在Thread里有个threadLocals字段,类型为ThreadLocal.ThreadLocalMapThreadL
- ThreadLocal 释放的方式有哪些
程序猿进阶
Java并发编程(多线程)java开发语言并发编程ThreadLocal线程池架构性能优化
ThreadLocal基础概念:IT-BLOG-CNThreadLocal是Java中用于在同一个线程中存储和隔离变量的一种机制。通常情况下,我们使用ThreadLocal来存储线程独有的变量,并在任务完成后通过remove方法清理这些变量,以防止内存泄漏。然而,在使用线程池时,线程会被重用,这可能导致ThreadLocal变量未被及时清理,从而引发内存泄漏问题。除了直接调用ThreadLocal
- ThreadLocal
一个在努力为老板实现梦想的搬砖工
springcloudjava开发语言
ThreadLocal原理API场景使用ThreadLocal思路代码原理ThreadLocal只有当前线程可以访问,每个线程都有自己的变量副本。线程消亡他也消亡,他是变量对象,不是线程。其中存储的内容只有当前线程能访问的APIvoidset(Tvalue)设置当前线程的threadlocal的值Tget()该方法返回当前线程threadlocal的值voidremoved()将当前线程threa
- 2024春招面试题:Java并发相关知识_threadlocal经典的应 场景就是连接管理
2401_84182824
程序员java面试jvm
//程序运行时,有主线程和垃圾回收线程也在运行。如果超过2个线程在运行,那就说明上面的20个线程还有没执行完的,就需要等待while(Thread.activeCount()>2){Thread.currentThread().getThreadGroup().activeCount();Thread.yield();//交出CPU执行权}System.out.println("number值加了
- ThreadLocal的用法及参数详解
CopyLower
Java学习python开发语言
引言ThreadLocal是Java中用于提供线程本地变量的类,它允许我们为每个线程创建独立的变量副本,即使多个线程并发地访问同一个变量,每个线程也能得到自己的本地副本而不互相干扰。ThreadLocal对于避免线程之间共享变量引起的线程安全问题非常有用,尤其是在多线程环境中。本文将详细讲解ThreadLocal的基本用法、应用场景、核心方法及其背后的工作原理。第一部分:ThreadLocal的作
- ThreadLocal——线程变量实现线程隔离
新一几
springbootjavajvm开发语言
一、ThreadLocal简介ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal变量,线程局部变量,同一个ThreadLocal所包含的对象,在不同的Thread中有不同的副本
- JAVA多线程基础篇 8、线程隔离与ThreadLocal
悟空学编程
JAVA多线程基础篇java开发语言后端
文章目录1.ThreadLocal的使用示例2.ThreadLocal的使用场景2.1线程隔离的数据库连接与事务2.2线程隔离的session会话3.ThreadLocal原理4.ThreadLocal与内存泄露4.1Java语言将Entry设计为弱引用4.2记得手动remove总结在多线程并发环境中,要保证线程并发安全总体有2类方法。使用锁,在访问资源时是互斥的、原子性的。这个锁可以是Synch
- 基于Threadlocal实现的上下文管理组件ContextManager
芬达~
javapythonjvm
在实际开发中,我们经常需要维护一些上下文信息,这样可以避免在方法调用过程中传递过多的参数。例如,当Web服务器收到一个请求时,需要解析当前登录状态的用户,并在后续的业务处理中使用这个用户名。如果只需要维护一个上下文数据,如用户名,可以通过方法传参的方式,将用户名作为参数传递给每个业务方法。然而,如果需要维护的上下文信息较多,这种方式就显得笨拙且难以维护。一个更加优雅的解决方案是使用ThreadLo
- java多线程:模拟ThreadLocal
╭╯Erica
并发编程java多线程
ThreadLocal存储的变量,同一线程下可见,不同线程不可见packagecom.tuyrk.chapter10;importjava.util.HashMap;importjava.util.Map;/***模拟ThreadLocal**/publicclassThreadLocalSimulator{privatefinalMapstorage=newHashMapthreadLocal=
- ThreadLocal 实战用法
crxk
Javajava多线程
ThreadLocal实战用法ThreadLocal是什么首先来看一下官方解释:Createsathreadlocalvariable.TheinitialvalueofthevariableisdeterminedbyinvokingthegetmethodontheSupplier.创建一个线程本地变量,变量的初始值是有调用get()方法的提供方所决定的。它的作用是在一个线程内部,不同的方法直
- 线程级缓存ThreadLocalCache
ykdsg
java缓存javadubbo
线程级缓存ThreadLocalCache源起很多时候一条操作链路上需要获取很多重复的基础信息,比如用户的信息,可能在AO层也有,Service层也有,这样造成的问题是每次都需要发起一次调用(数据库orRPC),这样造成的问题是对性能的无谓浪费,当然可以通过参数进行透传,但是这样带来的问题是必须修改方法的定义,一方面遗留代码需要大量修改,另一方面接口的参数也会极具庞大,特别是A->B->C,这样的
- java 全局工具类_工具类:基于ThreadLocal的一个线程级别的全局缓存ThreadLocalCache...
香浓拉码
java全局工具类
importjava.util.HashMap;importjava.util.Map;/***@authorJava菜鸟社区*/publicclassThreadLocalCache{privatestaticThreadLocal>cache=newThreadLocal>();/***从ThreadLocal里获取缓存的值*@paramkey要获取的数据的KEY*@return要获取的值*/
- 深入理解 `ThreadLocal` 的 `set` 和 `get` 方法
CodeDunkster
javajvm开发语言
ThreadLocal类在Java并发编程中非常有用,它允许每个线程拥有自己独立的变量副本。本文将详细讲解ThreadLocal的set和get方法的工作原理,并通过示例代码说明线程如何使用多个ThreadLocal实例。ThreadLocal的set和get方法原理set方法ThreadLocal的set方法用于将值存储到当前线程的ThreadLocalMap中。其主要步骤如下:获取当前线程:s
- Android之同一个Thread线程里只能有一个Looper?(ThreadLocal)
追梦的鱼儿
androidjavahandlerThreadLocalLooper线程
目录ThreadLocal的基本原理Looper和ThreadLocal的结合如何使用ThreadLocal的示例1.ThreadLocal变量的定义2.创建Looper实例3.获取Looper实例示例完整的示例总结同一个Thread线程里只能有一个Looper对象。在Android中,ThreadLocal是一个非常有用的工具,它允许你在每个线程中存储和访问独立的变量副本。Looper是Andr
- ThreadLocal中的内存泄漏问题及JDK处理方法13
高洪岩
jvmjava开发语言
由图可知,ThreadLocal.ThreadLocalMap对应的Entry中,key为ThreadLocal对象的弱引用,方法执行对应栈帧中的ThreadLocal引用为强引用。当方法执行过程中,由于栈帧销毁或者主动释放等原因,释放了ThreadLocal对象的强引用,即表示该ThreadLocal对象可以被回收了。又因为Entry中key为ThreadLocal对象的弱引用,所以当jvm执行
- “全栈2019”Java多线程第五十二章:LockSupport等待截止时间
人人都是程序员
难度初级学习时间10分钟适合人群零基础开发语言Java开发环境JDKv11IntelliJIDEAv2018.3文章原文链接“全栈2019”Java多线程第五十二章:LockSupport等待截止时间下一章“全栈2019”Java多线程第五十三章:ThreadLocal简单介绍学习小组加入同步学习小组,共同交流与进步。方式一:加入编程圈子。方式二:关注头条号Gorhaf,私信“Java学习小组”。
- 分页查询的两种实现方法
cyt涛
javamybatisjava数据库分页查询intellijidea
第一种:mybatis-plus自带的分页方法,通过调用selectPage方法实现分页,适用于通过QueryWrapper拼装SQL。第二种:pagehelper分页组件适用于自定义sql的分页查询。pagehelper分页组件的原理如下:调用PageHelper.startPage方法设置分页参数,通过一层一层进入源码,最终将分页参数设置到ThreadLocalLOCAL_PAGE=newTh
- 单例模式在源码中的使用
wbpailxt
饿汉式:图片.png容器单例模式:图片.pngThreadLocal线程单例:图片.png图片.png
- Java 中的线程本地存储(ThreadLocal)机制详解
๑҉ 晴天
javajava开发语言
在并发编程中,我们经常需要确保某些数据在线程之间是隔离的,以避免多线程竞争带来的数据不一致问题。Java提供了一种方便的机制来实现这种隔离,即ThreadLocal。本篇博客将详细讲解ThreadLocal的工作原理、使用方法以及其在实际开发中的应用场景,并附带代码示例以帮助读者理解。什么是ThreadLocal?ThreadLocal是Java提供的一种线程局部变量,它为每个使用该变量的线程都提
- Springboot-RequestContextHolder
ZHOU_VIP
MACjava开发语言
RequestContextHolder是Spring框架中的一个类,主要用于在多线程环境中存储和访问HTTP请求的上下文信息。它允许在Spring应用程序中从任何位置访问当前请求的相关信息,比如HTTP头部、会话数据等,而无需将请求对象直接传递到每个方法中。主要用途存储请求上下文:RequestContextHolder通过ThreadLocal变量来保存当前线程中的请求上下文信息。访问请求信息
- 2024Android面试题与答案(2)
it灰太狼
Android面试android
Framework内核解析面试题汇总Android中多进程通信的方式有哪些?描述下Binder机制原理?(东方头条)为什么Android要采用Binder作为IPC机制?Binder线程池的工作过程是什么样?(东方头条)AIDL的全称是什么?如何工作?能处理哪些类型的数据?Android中Pid&Uid的区别和联系Handler怎么进行线程通信,原理是什么?(东方头条)ThreadLocal的原理
- Java笔试面试题AI答之线程(4)
工程师老罗
Java笔试面试题AI答java开发语言
文章目录19.Java编写多线程程序的时候你会遵循哪些最佳实践?1.使用线程池2.使用Callable和Future3.保证变量可见性4.保证线程安全5.避免死锁6.安全地终止线程7.使用并发容器8.使用ThreadLocal避免共享变量9.合理使用原子类10.编写可测试的代码20.解释在多线程环境下,SimpleDateFormat是线程安全的吗?21.说明哪些Java集合类是线程安全的?22.
- JAVA设计模式之单例模式
芒果很忙耶
java单例模式设计模式
单例模式目录单例模式1、饿汉式单例模式2、懒汉式单例模式3、双重检查锁单例模式4、ThreadLocal单例模式5、枚举类单例模式Java中的设计模式主要分为三种类型:创建型模式、结构型模式和行为型模式。创建型模式关注如何创建对象,旨在解决对象的创建问题,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式等。今天我们详细说说单例模式(SingletonPattern)。Java单例模式
- ThreadLocal源码解析
七月拾光
使用示例publicclassThreadLocalDemo{privatestaticThreadLocalthreadLocal=newThreadLocal{threadLocal.set(1);System.out.println(Thread.currentThread().getName()+","+threadLocal.get());},"thread1").start();new
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持