线程的安全和不变性
前面介绍,条件竞争发生在多个线程访问同一个线程,其中一个要对资源进行更新。如果都是访问,那么是线程安全的。
我们可以确认对象和资源永不被改的话,我们就可以设置它会不可变的。但是你要记住引用不是线程安全的。即便控制了只能读,但是如果碰到引用对象,依旧还是不安全的。
Java 同步块
synchronized
可以用于以下地方:
- Instance methods
- Static methods
- Code blocks inside instance methods
- Code blocks inside static methods
synchronized是Java第一套同步访问控制机制。这个机制并不先进,所以Java5引入了一整个并发工具集来帮助开发者实现更佳的并发控制。
线程的信号
线程发信号的目的在于,线程之间彼此可以通信。此外,一个线程还可以等待另外一个线程的信号。
死锁以及死锁的预防
饥饿和公平算法
嵌套监控锁定