【001】创建线程有几种方式?
答:
3种
① 继承Thread线程类,步骤如下:
a) 自定义类继承Thread类
b) 在自定义类中重写Thread类的run方法
c) 创建自定义类对象(线程对象)
c) 调用start方法,启动线程,通过JVM,调用线程中的run方法
② 实现Runnable接口,步骤如下:
a) 创建线程任务类,实现Runnable接口
b) 在线程任务类中,重写接口中的run方法
c) 创建线程任务类对象
d) 创建线程对象,把线程任务类对象作为Thread类构造方法的参数使用
e) 调用start方法,启动线程,通过JVM,调用线程任务类中的run方法
③ 通过线程池,实现Callable接口
【002】什么是同步锁?实现同步的方式有几种
答:
多个线程想保证线程安全,必须要使用同一个锁对象。
同步的方式有3种,例:
① 同步代码块:
synchronized (锁对象) {
可能产生线程安全问题的代码
}
同步方法中的锁对象是 this
② 同步方法:
public synchronized void method () {
可能产生线程安全问题的代码
}
同步方法中的锁对象是 this
③ 静态同步方法:
public static synchronized void method () {
可能产生线程安全问题的代码
}
静态同步方法中的锁对象是 类名.class
【003】启动线程是用 run 还是 start,它们的区别是?
答:
启动线程是 start 方法
区别:start:启动线程,并调用线程中的 run 方法
run :执行该线程对象要执行的任务
【004】sleep 和 wait 方法的区别?
答:
sleep:不释放锁对象,释放CPU使用权,在休眠的时间内,不能唤醒
wait :释放锁对象,释放CPU使用权,在等待的时间内,能唤醒
【005】为什么 wait、notify、notifyAll 等方法都定义在Object类中?
答:
因为锁对象可以是任意类型的对象
|
|