无状态类
return type是void,不加任何成员变量的类
不可变类
1.加final 关键字的variable(不可更改) 2.不提供成员变量的修改方法
安全的发布, collections包裹
private List<Integer> list = Collections.synchronizedList(new ArrayList<>())
Servlet 解析
并不是线程安全的类,但是很少有共享servlet的需求,并且返回应答的时候通常由一个线程来负责。
死锁发生的条件
1.互斥条件: 资源排他
2.请求和保持条件: 线程至少保存一个资源,但又提出了新的资源请求
3.不剥夺条件: 线程未完成资源之前,不能被剥夺,只能使用完自己释放
4.环形等待: A 等 B, B 等 A
活锁
由于分配原因,锁总是给一个线程拿到,可以通过随机分配锁给线程来解
如何解决死锁
一般都是默认死锁不会发生,然后写程序单独解决死锁。
下文链接是死锁解决方案:
https://blog.csdn.net/xiaofeng66666/article/details/80494711
Operating system中还有死锁的解锁算法,但面试肯定不会问到也用不到.
线程饥饿
低优先级的线程总是拿不到执行时间.
如何减少锁的竞争
1.减少锁的粒度, 如果一个对象是独立变化的时候,应该用单独的锁一一锁住这些对象
2.缩小锁的范围, 如果锁住的是代码块的话, 那么减少锁的范围
3.避免独占锁,避免多余的锁
4.替换独占锁,用读写锁或者CAS
网友评论