摘要: 活跃性危险 死锁 什么是死锁? 一条小路上两个人堵到了一起,a说你让我先走吧,b说不行我不让,你先让我走,互不相让,两个人都过不去。 A线程等待b线程的锁,b线程的任务在等待a线程的锁,两个线程在此处不停尝试获得锁,永无休止。 死锁的种类: 静态锁顺序死锁 如图直接看代码就能看出有死锁问题。 动态锁 阅读全文
posted @ 2019-09-21 19:10 纸飞机上的梦 阅读(321) 评论(0) 推荐(0) 编辑
摘要: Java5.0以后除了内置锁synchronized外在concurrent包还提供了显式锁接口Lock。 何为显式? 就是显式地加锁和解锁,需要自己写代码去加锁和解锁。Synchronized是隐式加锁解锁,也就是无需自己写加锁解锁代码,进了synchronized代码块就隐式加锁,出了代码块就隐 阅读全文
posted @ 2019-09-21 19:08 纸飞机上的梦 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 什么是线程池? 通俗理解就是一个容器,里面放了一些线程,需要用时就取出来用,用完了就放回去等待下一次用。 线程池内部维护一个任务队列,从池里取出线程去执行队列里的任务。 为什么要使用线程池? 1.可以将任务的提交和执行策略解耦,便于统一管理任务执行策略,好维护,比如延时执行,设置等待时间,超时自动失 阅读全文
posted @ 2019-09-21 19:07 纸飞机上的梦 阅读(675) 评论(0) 推荐(0) 编辑
摘要: 使用同步工具类 闭锁 在线程执行过程中用一把锁把门锁住,在开锁之前线程无法通过这道门,只有当满足了开锁的条件之后,锁才会自动打开。 常用的闭锁工具类:CountDownLatch、CyclicBarrier、FutureTask。 闭锁应用场景 1.有a、b、c三个线程一起执行,可是a线程需要等待b 阅读全文
posted @ 2019-09-21 19:03 纸飞机上的梦 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 什么是可见性? 一个线程修改了共享变量的值,其他线程也能看到最新修改的值 。 下图是一段存在线程可见性问题的代码: 在主线程中修改两个变量的值,不一定对副线程可见,副线程有可能读取到为false的ready和为111的num。 为什么会出现这样的结果? 线程的交叉执行,重排序加线程交叉执行,共享变量 阅读全文
posted @ 2019-09-21 19:00 纸飞机上的梦 阅读(3216) 评论(0) 推荐(0) 编辑
摘要: 线程安全性与synchronized 线程安全:多线程访问某个类时,这个类始终都能表现出正确的行为,这个类就是线程安全的。 简单的说,就是多线程执行的结果与单线程执行的结果始终一致,不会因为多线程的执行时序不同而出现不同的结果 以下是一个线程不安全的程序: 当这段代码在单线程中执行时,会得出正确的答 阅读全文
posted @ 2019-09-21 18:59 纸飞机上的梦 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 什么是多线程? 一个程序(一个进程)运行过程中产生了不止一个线程。 一个生产汽车的车间好比一个进程,这个车间里的每个人分工合作,各自做自己的任务,每个工人好比一个线程,多个人同时工作则是多线程作业。 一个工人就是一个线程。 并行( parallel ) :多个cpu实例或者多台机器同时执行一段处理逻 阅读全文
posted @ 2019-09-21 18:57 纸飞机上的梦 阅读(244) 评论(0) 推荐(0) 编辑