摘要:
今天在开发一个招聘系统的时候,有投递简历功能,有投递就会有随之而来的查看简历对吧,我投递过的简历,另存为一个文件夹,就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹,用于存放PDF(此文件夹不在项目目录下),比如说文件夹在这个位置,那么我的项目就得必须读取到这个文件夹的url里的pdf 阅读全文
摘要:
探讨UnsupportedOperationException的原因及解决方案 Arrays.asList()方法返回的是不可变集合 做开发一定要注重细节。 在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组 阅读全文
摘要:
title: 第一步 cmd 执行 vue ui title: 第二步 title: 第三步 title: 第四部 title: 第五步 添加 vue-router 和 vuex title: 第六步 title: 第七部 title: 第八步 初始化 npm npm init 一路回车 //安装 阅读全文
摘要:
在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。 Java的线程既是工作单元,也是执行机制。从JDK 阅读全文
摘要:
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 阅读全文
摘要:
在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。本章会配合一些应用场景来介绍如何使用这些工具类。 一、等待多线程完成的Coun 阅读全文
摘要:
当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问 阅读全文
摘要:
一、ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的HashMap。 1.1、为什么要使用ConcurrentHashMap JDK1.7(ReentrantLock+Segment+HashEntry) JDK1.8(Synchroized+ 阅读全文
摘要:
一、Lock接口 虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。 使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放 阅读全文
摘要:
一、线程简介 1.1、什么是线程 1.2、为什么要使用多线程 1.3、线程优先级 1.4、线程的状态 Java线程在运行的生命周期中可能处于表4-1所示的6种不同的状态; 1.5、Daemon线程 Daemon线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这意味着,当一个Jav 阅读全文