摘要: 在java官方文档中描述:ThreadLocal类是提供线程内部的局部变量,这种变量在多线程环境下访问(通过get/set访问)时能保证各个线程的变量相对独立于 其他线程内的变量,ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文 我们可以得知Thre 阅读全文
posted @ 2022-05-19 22:18 努力的达子 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 1.CPU [root@bogon ~]# top top - 22:14:51 up 7 days, 12:38, 1 user, load average: 0.60, 0.29, 0.19 Tasks: 193 total, 1 running, 192 sleeping, 0 stopped 阅读全文
posted @ 2022-05-19 22:16 努力的达子 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 产生死锁的原因: 1.系统资源不足 2.进程进行推进的顺序不合适 3.资源分配不当 按照图示写个死锁: class HoldLockThread implements Runnable{ //定义两个对象,根据这两个对象来加锁 private String lockA; private String 阅读全文
posted @ 2022-05-19 22:14 努力的达子 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 为什么使用线程池优势? 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过最大数量,超出部分将排队等待。 其他线程执行完毕,再从队列中取出任务来执行 主要特点: 1.线程复用 2.控制最大并发数。 3.管理线程 优点: 1.降低资源消耗 阅读全文
posted @ 2022-05-19 22:13 努力的达子 阅读(42) 评论(0) 推荐(0) 编辑
摘要: Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 特点: 1.Callable 可以抛出异常 2.Callable 可以返回结果 3.Callable 调用get方法时会阻塞 4.C 阅读全文
posted @ 2022-05-19 22:09 努力的达子 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 题目:synchronized和Lock有什么区别?用新的lock有什么好处?举例说说 1.原子构成: synchronized是关键字属于JVM层面 monitorenter(底层通过monitor对象来完成。其实wait/notify等方法也依赖于monitor对象,只能在同步块或者方法中才能调 阅读全文
posted @ 2022-05-19 22:08 努力的达子 阅读(30) 评论(0) 推荐(0) 编辑
摘要: .生产者和消费者的synchronized 版本以及虚假唤醒问题 先看一个场景: 一个卖面的面馆,有一个做面的厨师和一个吃面的食客,需要保证,厨师做一碗面,食客吃一碗面, 不能一次性多做几碗面,更不能没有面的时候吃面; 按照上述操作,进行十轮做面吃面的操作。 样例代码: public class J 阅读全文
posted @ 2022-05-19 22:07 努力的达子 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 发现队列Queue和List/Set平级 阻塞队列的四组API: 方式 抛出异常 有返回值,不抛出异常 阻塞 等待 超时等待 添加 add offer() put() offer 移除 remove poll() take() poll 检测队首元素 element peek() 1.抛出异常api 阅读全文
posted @ 2022-05-19 22:01 努力的达子 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 1CountDownLatch(减法计数器) 1.CountDownLatch:减法记数器 有三个重要方法: 1.初始化,并确定计数器最大值 CountDownLatch countDownLatch = new CountDownLatch(6); 2.计数器数量-1 countDownLatch 阅读全文
posted @ 2022-05-19 21:58 努力的达子 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 1.公平锁和非公平锁 1.公平锁: 是值多个线程按照申请锁的顺序获取锁,类似排队打饭,先来后到 2.非公平锁: 是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获得锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象 上来直接尝试占有锁,如果尝试失败,再采用类 阅读全文
posted @ 2022-05-19 21:56 努力的达子 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 具体代码如下: @AllArgsConstructor @NoArgsConstructor @ToString @Data class Person { private int age; private String name; } public class TestTransferValue { 阅读全文
posted @ 2022-05-19 20:09 努力的达子 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 1.List集合在多线程下是不安全的 1.测试代码:创建30个线程同时操作一个资源list public class NotSafeDemo { public static void main(String[] args) { List<String> list=new ArrayList<>(); 阅读全文
posted @ 2022-05-19 20:06 努力的达子 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 1.问题:gc垃圾回收算法和垃圾回收器的关系?分别是什么谈谈你的看法 gc算法(引用计数/复制/标清/标整)是内存回收的理论,垃圾回收器是算法的落地实现 目前为止没有完美的收集器出现,只是针对具体应用选择合适的收集器,进行分代收集 4种主要垃圾收集器 1.Serial:串行垃圾回收器 2.Paral 阅读全文
posted @ 2022-05-19 19:57 努力的达子 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1.Volatitle关键字 volatitle是虚拟机提供的轻量级的同步机制,JMM是需要满足三个特性:可见性/原子性/禁止指令重排,但volatitle只能保证两个,不能保证原子性,所以其是轻量型的同步机制! 有三个特性: 1.保证可见性 2.不保证原子性 3.禁止指令重排 1.JMM(java 阅读全文
posted @ 2022-05-19 19:46 努力的达子 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 理解JVM中的几个内存模型 JVM的内存模型如下: 名词解释: Math math = new Math(); 1.堆:存放具体实例化后的对象内容:new Math() 2.栈:存放对应的引用:Math math存放的是Math对象在堆内存中的地址! 3.本地方法栈:存放的是线程内部的一个底层调用, 阅读全文
posted @ 2022-05-19 19:25 努力的达子 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 1.说⼀下ArrayList和LinkedList区别 1.具体区别 1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的 1.2. 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找, LinkedLi 阅读全文
posted @ 2022-05-19 19:10 努力的达子 阅读(128) 评论(0) 推荐(0) 编辑