
Java
logiter
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java:线程池的最大线程数目
现在,假设以下情况:偶尔出现某个线程阻塞的时候,如果线程池线程数刚好为cpu核心数,则虽然有一个CPU空闲,但依然无法执行别的任务,而如果线程池线程数为cpu核心数+1,则新任务来的时候,会认为还有一个cpu核心空闲,可以执行任务。首先说明:线程池管理的是逻辑上的“工作线程”,而不是直接控制物理CPU核心的使用。线程池不会自动将一个阻塞的线程移出池外,因为这个线程只是暂时不能执行任务,而并非不可用。设置线程数为cpu核心数+1,这样可以使得每个线程都在执行任务。原创 2024-08-17 18:31:13 · 536 阅读 · 0 评论 -
Java:阻塞态和等待态线程对锁的竞争
注意,区分阻塞线程获得了锁,和唤醒一个阻塞的线程。JVM会在锁释放的时候,唤醒被阻塞的线程。阻塞线程获得了锁,就直接进入就绪态。当一个线程持有的锁被释放后,JVM会自动唤醒阻塞在该锁上的其他线程。在这个过程中,阻塞态的线程并不需要显式的notify()来唤醒,因为锁的释放是自动管理的。notify只会唤醒等待态的线程,而不会唤醒阻塞态的线程。原创 2024-08-02 10:47:48 · 340 阅读 · 0 评论 -
Java:fail-fast与fail-safe
当多个线程对不支持并发的容器进行结构上的改变的操作时(是结构上面的修改,而不是简单的修改容器元素的内容),就可能触发 fail-fast 机制,抛出ConcurrentModificationException 异常,从而导致遍历失败。记住是有可能,而不是一定。fail-safe 表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException,原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,原创 2024-07-14 11:50:11 · 255 阅读 · 0 评论 -
Java:hashCode和equals
判等会同时使用hashcode和equals操作。如果重写了equals,使其不是比对地址而是比对内容,那么hashcode也要重写,因为hashcode默认也是比对地址,重写使用Object.hash()方法,可以修改为比对内容。如果自定义对象没有实现自定义的 hashCode 方法,就会使用 Object 超类的默认实现,得到的两个 hashCode 是不同的,导致无法满足需求。二者都需要重写,如果equals方法表明两个对象是相等的,但它们的hashCode值不同,那么这些集合类可能无法正确工作。原创 2024-07-18 10:30:28 · 838 阅读 · 0 评论