java影响数据处理的速度有哪些

Python014

java影响数据处理的速度有哪些,第1张

1. 运行时间:Java程序的运行时间取决于它的编译器,虚拟机和硬件环境。如果编译器和虚拟机的性能较低,则Java程序的运行时间也会受到影响。

2. 计算能力:Java的计算能力受到硬件环境的限制,如果硬件资源不足,则Java程序的计算能力也会受到影响。

3. 内存使用:Java程序的内存使用受到硬件环境的限制,如果硬件资源不足,则Java程序的内存使用也会受到影响。

4. 编程语言:Java程序的编程语言受到程序员的技术水平和编程经验的限制,如果程序员的技术水平和编程经验不足,则Java程序的编程语言也会受到影响。

文件读取:首先是一个文件上传,数据入库,10-200万条不等,这里主要考虑到一次性读取,JVM分配出来的栈内存不一定会够(个人对内存这一块还是处于一知半解的状态,所以比较谨慎,若诸位大神有好的认知,希望评论留下地址分享一下),是依行读取数据,设定一个批量值,当读取的数据达到一定量之后,执行批量入库操作,清空集合,再接着读取。

//读取文件内容

while((s = br.readLine())!=null){

//判断是否达到单次处理量

if(num%leadingNum==0&&num!=0){

int a = stencDao.insertBatch(listBean)

if(a!=leadingNum){

flag = false

}

//清空集合

listBean.clear()

}

String value = s.trim()

//将读取到的内容放入集合中

if(!value.equals("")){

StencilCustomer bean = new StencilCustomer()

bean.setCustomerPhone(value)

bean.setLinkStencilId(id)

listBean.add(bean)

num ++

}

}

数据处理:这里的思路也是将数据小化然后处理,这里使用了多线程,设定单个线程处理量,然后开启多个线程处理,这里需要考虑你的服务器的承载能力,如果线程开得太多了,处理不过来,会出现蹦死的情况。例如200万数据,我开了20个线程,单个线程处理600条。

//建立一个线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(

minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,

new ArrayBlockingQueue<Runnable>(minTaskNumber),

new ThreadPoolExecutor.DiscardOldestPolicy())

//当正在执行的线程数达到最大执行线程数的时候等待

boolean flag = true

while(flag){

Thread.sleep(1000)//休眠2ms查询一次

int c = threadPool.getActiveCount()//线程池中活动中的线程数量

if(c<maxTaskNumber){

flag = false

}

}

上面的代码是我对线程池的一个控制,控制服务器一直最大线程执行,Thread.sleep(1000)用while的时候,这个休眠最好不要去掉,去掉之后很影响执行效率

这是正常的,异步处理都是这有问题。特别是数据库开启事务的时候,上一个线程还没有提交的话,其他事务是看不到数据的。解决的办法就是要么采用同步的机制,在同一个线程中处理数据,自然就不会存在这种问题。如果一定要用异步的话,可以加入等待机制,就是判断数据是否入库,没有点话就等待一会儿,然后在判断,直到入库才进行后续的处理