- 博客(19)
- 收藏
- 关注
原创 一篇关于java工作一年的工作选择
我觉得人生中最难的时刻就是做各种选择。我到2021年8月正好工作一年的时间了,我觉得我把这次的选择说的有点严重了,与其说成是职业方向选择不如说成是两家公司之间的一次选择。我毕业于一个非常非常非常普通的本科院校,专业学的是信息管理与信息系统。我跟大多数的大学生一样,临近毕业的时候慌了,不知道该去干什么,也没有职业规划。身边的同学有的考编,有的紧锣密鼓的去找实习单位,有的躺在宿舍的床上进行紧张而又刺激的TiMi。这些都不是我想要的,我突然回想起来在上大学开始我就怀揣着去北京当一个努力而上进的码农梦想,所以我
2021-08-16 14:04:24 286
原创 java实现文件压缩并下载
package com.sinosoft.crms.vehicle.util;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;/** * @Aut
2020-12-22 16:59:56 2049 2
原创 使用easypoi根据模板导出word文档并下载
1.引入依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.2</version> </dependency>2.实现方法...
2020-12-21 18:16:14 1685 2
原创 Semaphore 信号灯
Semaphore是一种信号计数量,用于管理资源,是synchronized的加强版。控制线程数的并发数量。public class SemaphoreDemo { /** * 描述: 模拟多辆汽车抢三个车位,多线程抢多资源 */ public static void main(String[] args) { Semaphore semaph...
2019-12-19 17:16:52 173
原创 CountDownLatch与CyclicBarrier区别
CountDownLatch更多的强调一个线程多或多个线程等待其他线程执行完成某些任务后才执行,被等待的这些线程可以执行后停止,然后等待的线程才可以执行任务。好比英雄联盟,开始游戏主线程需要等待其他十个游戏玩家(线程)全部加载完毕,开始游戏主线程才可以执行。CyclicBarrier(循环屏障)强调的是多个线程之间相互等待。好比前边有个屏障,在没有所有线程完成任务前,提前到达的线程需要在屏障前等...
2019-12-19 16:53:23 187
原创 CyclicBarrier 循环栅栏
概述CyclicBarrier循环栅栏(循环屏障)是一种同步帮助,当多个线程一起执行任务是,一个线程没有完成任务,其他线程都必须进入等待状态,等待这个线程完成任务后,才能再执行其他任务。强调相互等待,一个线程不完成,其他线程全部等待。例如:一个公司去团建,需要大家全部集合完毕后,才能出发,有一个人员不到,全员都得等待。public class CyclicBarrierDemo { ...
2019-12-19 16:37:36 199
原创 CountDownLatch的概述与使用
概述CountDownLatch是一种同步帮助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。强调一个线程或多个线程等待其他线程操作完成后才能进行操作。例如在英雄联盟中主线程是开始游戏,这个主线程开始操作前需要等待10个玩家也就是其他十个线程全部加载完成后才能运行。实例public class CountDownLatchDemo { /** * 描述:需求...
2019-12-19 16:22:19 142
原创 ReentrantReadWriteLock读写锁的使用
读写锁概述 ReentrantReadWriteLock是Lock的另一种实现方式,我们已经知道了ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程、写线程和写线程同时访问。相对于排他锁,提高了并发性。在实际应用中,大部分情况下对共享数据(如缓存)的访问都是读操作远多于写操作,这时R...
2019-12-19 16:07:04 191
原创 CopyOnWriteArrayList
简单来说,就是平时查询的时候,都不需要加锁,随便访问,只有在写入/删除的时候,才会从原来的数据复制一个副本出来,然后修改这个副本,最后把原数据替换成当前的副本。修改操作的同时,读操作不会被阻塞,而是继续读取旧的数据。这点要跟读写锁区分一下。public boolean add(E e) { final ReentrantLock lock = this.lock; ...
2019-12-19 14:23:51 173 1
原创 ArrayList集合解决线程不安全问题
ArrayListArrayList是我们在开发中经常使用的一种集合,具有效率高并发性能强的特点。但是它是线程不安全的,会在高并发的情况下发生异常。模拟线程不安全情况 public static void main(String[] args) { List<String> list= new ArrayList<>(); //创建10...
2019-12-19 14:18:55 292
原创 synchronize关键字
synchronize关键字使用方法指定加锁对象同步代码块,对给定对象加锁,进入同步代码块之前需要获得给定对象的锁。synchronized ("任意类型"){ }这个括号里加任意类型对象都可以直接作用于实例方法相当于给当前实例对象加锁,进入到该同步方法前需要获得该实例对象的锁。换句话说,就是想要调用该方法必须获得当前实例对象的锁才能够调用。当有多个线程操作一个实例...
2019-12-17 11:24:31 143
原创 线程的生命周期
线程生命周期简单来说,线程的生命周期有五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)。CPU需要在多条线程之间切换,于是线程状态会多次在运行、阻塞、就绪之间切换。1.新建当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态,此时它和其他Java对象一样,仅仅有JVM为其分配了内存,并初始化了实例变...
2019-12-15 13:05:51 789
原创 多线程——线程调度
线程调度分时调度所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。抢占式调度优先让优先级别高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。抢占式调度详解:大部分操作系统都支持多线程并发运行,现在的操作系统几乎都支持同时运行多个程序,比如大家边看视频边编辑word文档。此时,这些程序是在同时运行,“”“感觉这些软件...
2019-12-15 12:35:59 840
原创 MySQL索引详细介绍
一、什么是索引?为什么要建立索引?索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段...
2019-12-13 18:27:36 97
原创 进程与线程理解
程序:为了完成某个任务和功能,选择一种编程语言编写的一组指令的集合。软件:1个或多个**应用程序+相关的素材和资源文件等构成一个软件系统。进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一...
2019-12-12 17:10:10 92
原创 并发与并行的区别
并行(parallel):指两个或多个事件在同一时刻发生(同时发生)。指在同一时刻,有多条指令在多个处理器上同时执行。并发(concurrency):指两个或多个事件再同一个时间段内发生。指在同一时刻只能有一条指令执行,但多个进程的指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统...
2019-12-12 14:54:28 178 1
原创 Vue的介绍与入门使用
一、介绍1.Vue.js是什么1.Vue是一套用于构建用户界面的渐进式框架。2.Vue的核心库只关注视图层,不仅容易上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue也完全能够为复杂的单页应用提供驱动。M (Model)V (View)VM(View-Model)这是官方网站:https://cn.vuejs.org2.初始Vue....
2019-12-12 14:20:23 152
原创 ECMAScript 6简介与简单使用(基本语法)
ECMAScript 6简介ECMAScript 6.0是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或者JScript,所以可以理解为是JavaScript的一个标准,但实际上后两者是ECMA标准的实现...
2019-12-10 21:21:08 350
原创 Git的介绍与使用以及常用命令总结
Git的介绍与使用是什么GIt是一个是目前世界上最先进的开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。由Linus Torvalds帮助管理linux内核开发的一个开源的版本控制软件。能干什么1.协同开发2.权限管理3.冲突解决4.代码备份5.版本还原6.历史追查7.版本记录8.分支管理9.代码审查使用初次使用:在安装完git工具后第一次...
2019-12-05 15:49:10 218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人