java并发面试题(七)
重写run()方法时可以对外抛出异常么? 答:不行,因为被重写的run()方法自身就没有抛出异常的定义,所以run()方法里要是有异常,在内部就要try/catch了。 线程可以连续调用两次start方法么? 答:可参考本篇博客 线程连续两次调用start()方法 。 简述锁的等级方法锁、对象锁、类锁? 答:首先要了解每个对象都有一个可以用来实现同步的锁,称为内置锁。方法锁和对象锁指的其实是同一个东西,只是synchronized关键字使用的地方不同而已,都是作用于实例对象,所以如果是相同类的不同实例,它们的锁也是不同的。而类也是一个特殊的对象,类锁就是作用于类上的锁,比如静态同步方法的锁就是类锁,这时候再多的实例,只要它们归属的类是相同的,那抢的就是同一把锁。 多线程的价值? 答:首先可以充分利用多核CPU的优势,其次可以防止阻塞,完全可以在一个任务阻塞时,先做其他的任务,然后等第一个任务返回后再做统合,最后使用多线程可以对任务进行拆解,把一个大任务拆分成几个小任务运行,当然,能否成功拆解还是要看具体的业务逻辑。 锁机制有什么用? 答:多线程情况下,保证信息的同步,结果的正确。 请说出你所知的线程同步的方法? 答: wait() : 使一个线程处于等待状态,并且释放所持有的对象的锁。 sleep() : 使一个正在运行的线程处于睡眠状态(睡眠可以理解成睡到一定时间线程自己就会醒)