Java基础面试每日3题:day14
Posted 闲言_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础面试每日3题:day14相关的知识,希望对你有一定的参考价值。
1.为什么我们调用start() 方法时会执行run()方法,为什么我们不能直接调用run()方法?
new 一个Thread,线程进入了 新建状态;调用start()方法,会 启动一个线程,并使线程进入 就绪状态,当分配到时间片后就可以开始运行了。start()会执行线程的相应准备工作,然后自动执行run()方法的内容,这是真正的多线程工作。
而 直接执行run()方法,会把run()方法当成一个main线程下的普通方法区执行,并不会在某个线程中执行它,所以这并不是多线程工作。
总结:调用start方法方可启动线程,并使线程进入就绪状态,而run方法只是Thread 的一个普通方法调用,还是在主线程里执行。
2.说一说自己对synchronized关键字的了解
synchronized 解决的是多个线程之间访问资源的同步性,synchronized关键字能保证被它修饰的方法或代码块在任意时刻, 只能有一个线程执行。
3.数据库中的乐观锁和悲观锁
悲观:在做事情的时候总是往坏的方向想,总是 做最坏的打算。悲观锁就是每次你操作数据的时候,总想着别的线程也可能在操作该数据,所以每次读写的时候都会对线程加锁,别的线程进不来,等数据读写完之后才会放下一个线程进来
乐观:见名知意。总是在做事情的时候往好的方向想, 每次读取数据的时候 认为该数据没有被其他线程修改。乐观锁则相反,不存在加锁。
总结:读取频繁使用乐观锁,写入频繁使用悲观锁。
以上是关于Java基础面试每日3题:day14的主要内容,如果未能解决你的问题,请参考以下文章