synchronized的锁分类有对象锁跟类锁。
对象锁是针对于new出来的单个对象不同对象互不影响。类锁是针对于是整个模板,所有对象公用。所有实例对象共用一把锁。
在来说一下关于死锁。什么是死锁,死锁就是多个线程互相持有对方的锁,又都不释放自己的锁导致互相僵持。产生死锁的条件有 互斥:同一时间只能有一个线程持有 请求并保持:拿到一把锁还要去申请另一把锁 不可剥夺:自身持有的锁不能抢夺 循环等待:线程一请求线程二的锁,线程二请求线程一的锁。 解决死锁的方法有:统一锁的顺序:所有线程按照统一的顺序取锁。 减少锁的嵌套,尽量减少同步块代码的范围。 设置超时时间。
ThreadLocal是一个什莫样的技术
ThreadLocal通过在每个线程中维护一个集合ThreadLocalMap来实现线程的隔离,它将每个ThreadLocal作为键,线程私有的变量作为值。每个线程都有ThreadLocalMap,每个线程可以通过ThreadLocal.get()或set()来存取变量。另外Threadlocal的生命周期跟线程的生命周期是绑定的。所以还需要使用.remove()方法来实现清理。
悲观锁跟乐观锁区别
先说一下它们的定义 悲观锁就是当它使用数据的时候会认为一定有其他线程来修改数据。所以在进行操作之前先加锁,确保其他线程不会修改。适合于写操作较多的情况。 乐观锁则是在使用数据的时候不认为会有其他线程来修改,所以就不加锁,只会在更新数据的时候判断之前有没有其他线程已经更新了。锁的实现有CAS算法:是一种更新的原子操作,比较当前值跟传入值是否一样(比较内存值跟原值是否一样)。一样则更新,否则说明已经被修改了返回false,不进行任何操作。适用于读操作较多。