摘要: ThreadLocal作用: 1.线程隔离。线程间:ThreadLocal可实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题。 2.资源共享。线程内:ThreadLocal同时实现了线程内的资源共享。 ThreadLocal原理:关联资源 每个线程中都有一个独立的Thr 阅读全文
posted @ 2022-08-24 23:49 临易 阅读(219) 评论(0) 推荐(0) 编辑
摘要: HashTable与ConcurrentHashMap比较 1.HashTable与ConcurrentHashMap都是线程安全的Map集合。 2.HashTable与ConcurrentHashMap的键和值都不能为空。 3.HashTable并发度低,整个HashTable对应一把锁,同一时刻 阅读全文
posted @ 2022-08-24 22:43 临易 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 1.悲观锁的代表是synchronized和Lock锁。 1.核心思想:线程只有占有了锁,才能去操作共享变量,每次只有一个线程占锁成功,获取锁失败的线程都得停下来等待。 2.线程从运行到阻塞、再从阻塞到唤醒,涉及线程上下文切换,如果频繁会影响性能。 3.实际上,线程在获取synchronized和L 阅读全文
posted @ 2022-08-24 21:34 临易 阅读(21) 评论(0) 推荐(0) 编辑
摘要: volatitle能否保证线程安全? 线程安全要考虑三个方面:可见性,有序性,原子性。 1.可见性:一个线程对共享变量修改,另一个线程能看到最新结果。 2.有序性:一个线程内代码按照编写顺序执行。 3.原子性:一个线程内多行代码以一个整体运行,期间不能有其他线程代码插队。 volatile能够保证共 阅读全文
posted @ 2022-08-24 16:44 临易 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 语法层面 synchronized是关键字,源码在jvm中,用c++语言实现。 Lock是接口,源码由jdk提供,用Java语言实现。 使用synchronized时,退出同步代码块,锁会自动释放。 使用Lock时,需要手动调用unlock方法释放锁。 功能层面 二者均属于悲观锁,都具备互斥(一个线 阅读全文
posted @ 2022-08-24 15:47 临易 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 共同点: wait(),wait(long),sleep(long)的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。 不同点: 方法归属不同 sleep(long)是Thread的静态方法。 wait,wait(long)都是Object的成员方法,每个对象都有。 醒来时机不同 sleep 阅读全文
posted @ 2022-08-24 14:52 临易 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 示意图: 1.核心线程数:最多保留的线程数(可以为0) 2.最大线程数:核心线程+救急线程 3.workQuene:阻塞队列,对任务起到缓冲作用。还未进行的线程不会直接成为救急线程,而是先存在任务队列中,等核心线程空闲下来后,会被获取执行。(上限控制) 4.救急队列:当核心线程都在运行,任务队列也都 阅读全文
posted @ 2022-08-24 14:36 临易 阅读(83) 评论(0) 推荐(0) 编辑
摘要: java中的线程状态 线程状态_五种状态vs六种状态 五种状态:操作系统层面 分到CPU时间的:运行 可以分到CPU时间的:就绪 分不到CPU时间的:阻塞 Java中的Runnable涵盖了操作系统中的就绪、运行、阻塞 I/O状态。 阅读全文
posted @ 2022-08-24 11:49 临易 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 单例模式的五种实现方式 1.饿汉式 public class Singleton1 implements Serializable { private Singleton1() { if (INSTANCE != null) { throw new RuntimeException("单例对象不能重 阅读全文
posted @ 2022-08-24 10:42 临易 阅读(26) 评论(0) 推荐(0) 编辑