Java基础面试每日3题:day14

目录

1.为什么我们调用start() 方法时会执行run()方法,为什么我们不能直接调用run()方法?

  new 一个Thread,线程进入了 新建状态;调用start()方法,会 启动一个线程,并使线程进入 就绪状态,当分配到时间片后就可以开始运行了。start()会执行线程的相应准备工作,然后自动执行run()方法的内容,这是真正的多线程工作。

  而 直接执行run()方法,会把run()方法当成一个main线程下的普通方法区执行,并不会在某个线程中执行它,所以这并不是多线程工作。

  总结:调用start方法方可启动线程,并使线程进入就绪状态,而run方法只是Thread 的一个普通方法调用,还是在主线程里执行。

2.说一说自己对synchronized关键字的了解

  synchronized 解决的是多个线程之间访问资源的同步性,synchronized关键字能保证被它修饰的方法或代码块在任意时刻, 只能有一个线程执行

3.数据库中的乐观锁和悲观锁

  悲观:在做事情的时候总是往坏的方向想,总是 做最坏的打算。悲观锁就是每次你操作数据的时候,总想着别的线程也可能在操作该数据,所以每次读写的时候都会对线程加锁,别的线程进不来,等数据读写完之后才会放下一个线程进来

  乐观:见名知意。总是在做事情的时候往好的方向想, 每次读取数据的时候 认为该数据没有被其他线程修改。乐观锁则相反,不存在加锁。

  总结:读取频繁使用乐观锁,写入频繁使用悲观锁。
上一篇:牛客java专项练习-day14


下一篇:从零开始学Java-Day14