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