摘要: 1、标记-清除(Mark-Sweep)算法 标记-清除算法分为两个阶段:标记阶段、清除阶段。 在标记阶段,会标记出所有需要回收的对象,标记完成后,统一回收所有被标记的对象。 缺点: (1)效率问题,标记和清除阶段效率都不高。 (2)空间问题,会产生大量的不连续的内存碎片,不利于分配较大的对象。 2、 阅读全文
posted @ 2021-11-18 09:53 Sempron2800+ 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 1、Sleep: sleep的作用是让目前正在执行的线程休眠,让CPU去执行其他线程。线程的状态变成阻塞状态。 注意:sleep会发生线程中断异常;sleep不会释放锁。 2、Wait: wait必须先获得对应的锁才能调用,它让线程进入等待状态,释放当前线程持有的锁,线程只有在其他线程调用notif 阅读全文
posted @ 2021-11-18 08:41 Sempron2800+ 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 线程池中的几个重要概念: 1.核心线程(corePool):线程池最终执行任务的角色肯定还是线程,同时我们也会限制线程的数量,所以我们可以这样理解核心线程,有新任务提交时,首先检查核心线程数,如果核心线程都在工作,而且数量也已经达到最大核心线程数,则不会继续新建核心线程,而会将任务放入等待队列。 2 阅读全文
posted @ 2021-11-18 08:30 Sempron2800+ 阅读(143) 评论(0) 推荐(0) 编辑
摘要: java创新线程需要占用大量资源,需要JVM和操作系统配合完成大量工作。 1.必须为线程分配和初始化大量内存,其中包含至少1MB的栈内存。 2.需要进行系统调用,以便在OS中创建和注册本地线程。 Java高并发应用频繁创建和销毁线程的操作是非常低效的,而且是不被编程规范所允许的。 线程池可以降低ja 阅读全文
posted @ 2021-11-18 08:15 Sempron2800+ 阅读(77) 评论(0) 推荐(0) 编辑
摘要: Java中线程分为两类:User Thread(用户线程)、Daemon Thread(守护线程)。 只要当前JVM实例中存在任何一个用户线程没有结束,那全部守护线程就可以存留。 当全部的用户线程都结束工作的时候,守护线程会随着JVM一同停止工作。 注意: 1.thread.setDaemon(tr 阅读全文
posted @ 2021-11-18 08:08 Sempron2800+ 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 死锁发生的四个必要条件: 1.互斥条件,同一时间只能有一个线程获取资源。 2.不可剥夺条件,一个线程已经占有的资源,在释放之前不会被其他线程抢占。 3.请求和保持条件,线程等待过程中不会释放已占有的资源。 4.循环等待条件,多个线程互相等待对方释放资源。 死锁的预防,就是要打破这四个必要条件: 1. 阅读全文
posted @ 2021-11-18 07:58 Sempron2800+ 阅读(71) 评论(0) 推荐(0) 编辑