java中锁的含义

今天做到了一个题,发现自己对java的锁理解的不太够。觉得这个问题可能有的人也会有理解上的失误。

 What is true while A is in a synchronized (list) { ... } block?
– It owns the lock on list
– It does not own the lock on list
– No other thread can use observers of list
– No other thread can use mutators of list
– No other thread can acquire the lock on list
– No other thread can acquire locks on elements in list

这个选择什么呢?是第一个和第五个!

以前我理解锁的概念呢,是在不同的线程中只能有一个线程访问到这个锁对应的对象,但是在研究了一些代码的使用时,发现并不是这样的。锁的概念呢,是说同时只能有一个线程获取到这个锁,其他的线程要等待这个线程将锁释放后才可以获取到这个锁,其实“锁”从这个意义上来说,锁住的不是要访问的对象,而是代码。假如有多个线程要访问一个对象,有一个线程获取到了这个对象的锁,但是其他的对象仍然可以访问这个对象并进行修改,只是获取不到锁,完全可以不使用锁来进行修改。

所以说现在明白为什么是第一个和第五个了吧,其他的线程上的observers、mutators等仍然可以访问list,不获取锁就好了啊。并且list的锁和里面对象的锁完全不同,其他线程可以获取list里面对象的锁。

你可能感兴趣的:(笔记)