##java面试题
#####1、可以直接调用Thread()类的run()接口吗?
- 可以,得把如果我们调用了Thread的run()方法,它的行为就和普通方法一样,未来在新的线程中执行我们的代码,我们必须使用Thead.start()方法。
#####2、如何让正在运行的线程暂停一段时间? - 我们可以使用Thread类中的Sleep()方法来使线程暂停一段时间。需要注意的是, 这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态会改变成Runnable,并且根据线程的调度,它将会得到执行。
一般来说,高优先级的线程在运行时会有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的。我们可以定义线程的优先级,但这并不能保证高优先级的线程会在低优先级的线程前执行。线程是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。
#####3、为什么wait(),notify()和notifyAll()必须在同步方法或者同步模块中被调用?
- 当一个线程在需要调用对象的wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态直到其他的线程调用这个对象的notify()方法。同样的,当一个线程需要调用notify()方法时,它会释放这个对象的锁,一边其他在等待的线程就可以得以实现这个对象锁,由于所有的这些方法都需要线程持有对象的锁,这样就只能通过同步来实现,所有他们只能在同步方法或者同步块中被调用。
asjkhkjshkjsah会计师的痕迹加厚的艰苦