1、线程run和start的区别?
- 当程序调用 start() 方法,将会创建一个新线程去执行 run() 方法中的代码。 run() 就像一个普 通方法一样,直接调用 run() 的话,不会创建新线程。
- 一个线程的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常。 run() 方法则没有限制。
2、wait()和sleep()的异同点?
相同点:
1. 使当前线程暂停运行,把机会交给其他线程
2. 任何线程在等待期间被中断都会抛出 InterruptedException
不同点:
1. wait() 是Object超类中的方法;而 sleep() 是线程Thread类中的方法
2. 对锁的持有不同, wait() 会释放锁,而 sleep() 并不释放锁
3. 唤醒方法不完全相同, wait() 依靠 notify 或者 notifyAll 、中断、达到指定时间来唤醒;而 sleep() 到达指定时间被唤醒
4. 调用 wait() 需要先获取对象的锁,而 Thread.sleep() 不用
3、Runnable和Callable有什么区别?
- Callable接口方法是 call() ,Runnable的方法是 run() ;
- Callable接口call方法有返回值,支持泛型,Runnable接口run方法无返回值。
- Callable接口 call() 方法允许抛出异常;而Runnable接口 run() 方法不能继续上抛异常。