- 博客(34)
- 收藏
- 关注
原创 线程池按照提交任务的顺序执行
在导出excel的时候,使用多线程边读数据边写excel时,想按照分页的顺序写,但是多线程中执行任务的顺序不定,导致会等待。那线程池怎么才能按照提交任务的顺序执行?
2025-04-12 17:41:20
184
原创 使用aspose-cad将dwg文件转换成pdf,裁剪四周空白
转换之后,有的不规范dwg文件,转换出来之后四周有很大的空白,影响查看。可以转换成图片之后裁剪掉空白的部分。最近遇到CAD的图纸,转换成pdf,使用aspose-cad将dwg文件转换成pdf。
2024-11-13 19:49:47
689
1
原创 数据库面试题总结-MySQL
索引是帮忙MySQL高效获取数据的数据结构,主要用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低排序的成本,从而降低CPU的消耗。通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表。覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到。如果使用id(主键)查询,会直接走聚集索引查询,一次索引扫描直接返回数据,性能高。
2023-06-10 22:04:45
111
原创 数据结构与算法---数组
但是有利也有弊,这两点也让数组很多其他操作变得非常低效,比如删除、插入一个元素,为了保证连续性,就需要做大量的数据搬迁工作。除了数组,链表、队列、栈等也是线性表结构。比如数组中存储a,b,c,d,e了5个元素,删除掉元素c,为了保持内存的连续性,需要搬迁数据。比如数组中存储a,b,c,d,e了5个元素,插入元素x,c,d,e 3个元素需要后移。正是由于这两点,数组拥有了一个堪称“杀手锏”的特性:“随机访问”。与它对立的概念是非线性表,比如二叉树、图、表等。如下直接访问第3个元素(数组是从0开始编号的)。
2023-04-29 11:29:09
83
原创 设计模式---简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象决定创建出哪一种产品类的实例。
2023-04-23 20:57:23
59
原创 JAVA---CyclicBarrier
CountDownLatch是基于AQS实现的;有若干个线程,比如有4个线程,需要他们到达某一个点之后才能开始一起执行,假如有3个线程到达了这个点,还差1个线程没到达,此时3个线程都会进入等待状态,直到第4个线程也到达这个点之后,这4个线程才开始一起进行执行状态。System.out.println(System.currentTimeMillis() + " 线程1,准备好了。System.out.println(System.currentTimeMillis() + " 线程3,准备好了。
2023-04-10 20:58:34
66
原创 JAVA---CountDownLatch
使通过一个计数器来实现的,计数器的初始值是线程的数量,每当一个线程执行完毕之后,调用countDown方法,计算器值减1,当计数器的值为0时,表示所有线程都执行完毕了,等待的线程就可以恢复工作了。AQS的其中一个作用就是维护线程状态和获取释放锁。System.out.println("3个线程都执行完了,主线程可以恢复执行了。System.out.println("countDownLatch减1");System.out.println("countDownLatch减1");
2023-04-09 20:51:17
289
原创 JAVA---synchronized在JDK1.6中的优化
在JDK1.5版本推出了ReentrantLock,lock性能远高于synchronized,在JDK1.6版本,对synchronized做了大量优化。
2023-04-06 21:50:05
222
原创 JAVA---ThreadLocal应用场景及底层实现
如果在线程池中使用ThreadLocal会造成内存泄漏,因为当ThreadLocal对象使用完之后,应该要把设置的key和value,也就是Entry对象进行回收,但是线程池中的线程不会被收回,而线程对象是通过强引用指向ThreadLocalMap,ThreadLocalMap也是通过强引用指向Entry对象,线程不被回收,Entry对象也就不会被收回,从而出现内存泄漏。解决方法是使用ThreadLocal对象之后,手动调用ThreadLocal的remove方法,手动清除Entry对象。
2023-04-05 21:40:31
168
原创 JAVA---并发中的可见性、原子性、有序性
但是有可能线程A执行了第1条指令后,就发生了线程切换,线程A暂停执行,此处如果线程B也是执行i++,并且把3条指令都执行完了,那么线程B得到的结果i=2,然后线程A又切换回来继续执行,最终导致的线程A得到的结果也是i=2,正常来说i应该等于3的,这就是原子性问题。如上图,当线程A读取变量i时,会从内存中读取数据,并缓存一份在CPU1内部的高速缓存中,然后线程A将变量i的值修改为2,但是还没来得及回写到内存,此时线程B也读取变量i,也会从内存中读取,读到的变量i仍然为1,此时就出现了可见性问题。
2023-04-05 18:26:36
148
原创 JAVA---线程池中提交一个任务的流程
**/return;if (!else if (!retry:for (;;) {!!for (;;) {= rs)......
2023-04-04 22:11:55
259
原创 SimpleDateFormat类的线程不安全
并发场景下,SimpleDateFormat类是线程不安全的,有的小伙伴会有疑问:我们一直使用SimpleDateFormat类来解析和格式化时间,也没发现问题啊。那是因为并发量还没有达到出现问题。
2023-04-03 22:43:15
89
原创 JAVA---Sychronized和ReentrantLock有什么不同
锁的是对象,锁信息保存在对象头中。Java中的一个关键字。需要手动加锁与释放锁。state标识锁状态。
2023-03-29 20:29:44
80
原创 JAVA---为什么不建议使用Executors来创建线程池
创建的队列是LinkedBlockingQueue,LinkedBlockingQueue是一个基于链表实现的阻塞队列,默认情况下,该阻塞队列的大小是Integer.MAX_VALUE,由于数值特别大,所以也被称为无界队列。如果使用该线程池执行任务,任务过多就会不断的添加到队列中,任务越多占用的内存就越多,最终有可能会耗尽内存,引起OOM。除了可能引起OOM之外,Executors来创建线程池也不能自定义线程的名字,不利于后续分析。所以建议直接使用ThreadPoolExecutor来创建线程池。
2023-03-29 20:28:26
227
原创 JAVA---ThreadPoolExecutor创建线程池
workQueue:一种阻塞队列,用来存储线程池等待执行的任务,均为线程安全。一般分为直接提交队列,有界任务队列,无界任务队列,优先任务队列等。keepAliveTime:最大线程数可以存活的时间,当线程中没有任务执行时,最大线程数会销毁一部分,最终保持核心线程数。LinkedBlockingQueue:一个由链表结构组成的无界阻塞队列(也可以设置队列大小,变成有界)unit:单位,和keepAliveTime配和使用,用于设定线程的存活时间,时间单位有以下7种可选。
2023-03-29 20:26:40
288
原创 JAVA---线程状态
时间等待状态(TIME_WAITING):调用sleep方法或者join方法,处于TIME_WAITING状态,会自动唤醒,无需手动唤醒。就绪/运行状态(Runnable):线程对象创建后,其他线程调用了该线程对象的start方法,从而启动该线程。等待(WAITING):调用wait方法就会处于WAITING状态,需要被手动唤醒。结束状态(TERMINATED):线程的run方法执行完了,线程生命周期结束了。新建状态(NEW):线程对象被创建后就进入了新建状态。
2023-03-24 22:00:08
79
原创 JAVA---线程实现的方式
2、FutureTask实现了Runnable,run方法调用callable。3、线程池创建的Worker也是实现了Runnable。其实,都是实现Runnable接口。1、Thread实现Runnable。
2023-03-24 20:54:10
59
原创 JAVA---可重入锁与不可重入锁
用一个计数器来记录锁被获取的次数,获取锁时,识别获取锁的线程是否为当前占据锁的线程,如果是再次获取成功,计数加1,释放锁时,计数减1,当计数器为0时才能释放锁。又名递归锁,指的是可重复可递归调用的锁,任意线程在获取锁之后能够再次获取该锁而不被锁所阻塞。ReentrantLock、synchronized修饰的方法或者代码段。
2023-03-24 19:27:07
164
原创 JAVA---共享锁与独占锁
ReentrantReadWriteLock,读锁是共享锁,写锁是独占锁。ReentrantLock、synchronized独享锁。是指该锁一次只能被一个线程所持有。是指该锁可以被多个线程所持有。
2023-03-24 19:25:53
251
原创 JAVA---公平锁与非公平锁
为了更高的吞吐量,非公平锁比较合适,因为节约很多线程切换时间,吞吐量自然就上去了;否则那就使用公平锁,大家公平使用。公平锁:每个线程获取锁的顺序是按照线程访问锁的先后顺序获取,最前面的线程总是先获取到锁。非公平锁:每个线程获取锁的顺序是随机的,并不遵循先来先得的规则,线程会竞争获取锁。ReentrantLock默认是非公平锁。
2023-03-24 19:25:12
133
原创 JAVA---悲观锁与乐观锁
比如一个变量V的初始值为A,有3个线程在处理,线程1和线程2同时处理,线程1将V的值修改为B,在线程2赋值检查之前,线程3又将V的值修改回了A,线程2在赋值检查时V的值虽然仍然是A,但是V的值已经被线程1和3修改过了。乐观锁总是假设最好的情况,认为自己在使用数据的时候不会有其他的线程来修改数据,无需加锁也无需等待,只是在提交数据的时候去检查有没有别的线程更新过数据。悲观锁总是假设最坏的情况,认为自己在使用数据的时候一定会有其他的线程来修改数据,因此在获取数据时先加锁,确保数据不会被别的线程修改。
2023-03-24 19:20:56
91
JAVA源码 + SpringBoot+vue+mysql 漫画天堂网 + 数据库 + 文档
2025-04-09
JAVA源码 + SpringBoot+vue+mysql 摄影师社区 + 数据库 + 文档
2025-04-08
JAVA源码 + SpringBoot+vue+mysql 在线课程管理系统 + 数据库 + 文档
2025-04-08
JAVA源码 + SpringBoot+vue+mysql 仓库管理系统 + 数据库 + 文档
2025-04-06
JAVA源码 + SpringBoot+vue+mysql 动漫交流与推荐平台 + 数据库 + 文档
2025-04-04
JAVA源码 + SpringBoot+vue+mysql 农产品电商平台 + 数据库 + 文档
2025-04-04
JAVA源码 + SpringBoot+vue+mysql 智慧旅游系统 + 数据库 + 文档
2025-03-29
JAVA源码 + SpringBoot+vue+mysql 智慧农业专家远程指导系统 + 数据库 + 文档
2025-03-27
JAVA源码 + SpringBoot+vue+mysql 智能学习平台系统 + 数据库 + 文档
2025-03-25
JAVA源码 + SpringBoot+vue+mysql 林业产品推荐系统 + 数据库 + 文档
2025-03-23
JAVA源码 + SpringBoot+vue+mysql 学生网上选课系统 + 数据库 + 文档
2025-03-23
JAVA源码 + SpringBoot+vue+mysql 在线教育系统 + 数据库 + 文档
2025-03-19
JAVA源码 + SpringBoot+vue+mysql 客户关系管理系统 + 数据库 + 文档
2025-03-19
JAVA源码 + SpringBoot+vue+mysql 健康健身追踪系统 + 数据库 + 文档
2025-03-18
JAVA源码 + SpringBoot+vue+mysql 数码产品抢购系统 + 数据库 + 文档
2025-03-17
JAVA源码 + SpringBoot+vue+mysql 美容院管理系统 + 数据库 + 文档
2025-03-14
JAVA源码 + SpringBoot+vue+mysql 师生健康信息管理系统 + 数据库 + 文档
2025-03-12
JAVA源码 + SpringBoot+vue+mysql 美发门店管理系统 + 数据库 + 文档
2025-03-12
JAVA源码 + SpringBoot+vue+mysql 城镇保障性住房管理系统 + 数据库 + 文档
2025-03-07
JAVA源码 + SpringBoot+vue+mysql 大型商场应急预案管理系统 + 数据库 + 文档
2025-03-07
JAVA源码 + SpringBoot+vue+mysql 华强北商城二手手机管理系统 + 数据库 + 文档
2025-03-04
JAVA源码 + SpringBoot+vue+mysql 班级回忆录 + 数据库 + 文档
2025-03-04
JAVA源码 + SpringBoot+vue+mysql 企业oa管理系统 + 数据库 + 文档
2025-03-03
JAVA源码 + SpringBoot+vue+mysql 多维分类的知识管理系统 + 数据库 + 文档
2025-03-03
JAVA源码 + SpringBoot+vue+mysql 工作流程管理系统 + 数据库 + 文档
2025-03-02
JAVA源码 + SpringBoot+vue+mysql 校园数字化图书馆系统 + 数据库 + 文档
2025-02-28
JAVA源码 + SpringBoot+vue+mysql 新能源汽车个性化推荐系统 + 数据库 + 文档
2025-02-27
JAVA源码 + SpringBoot+vue+mysql 体育商品推荐 + 数据库 + 文档
2025-02-27
JAVA源码 + SpringBoot+vue+mysql 教师工作量管理系统 + 数据库 + 文档
2025-02-26
JAVA源码 + SpringBoot+vue+mysql 企业客户管理系统 + 数据库 + 文档
2025-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人