黑马程序员技术交流社区

标题: 【广州校区】【原创】多线程常见问题精华总结 [打印本页]

作者: 帅气de路人甲    时间: 2018-2-8 10:19
标题: 【广州校区】【原创】多线程常见问题精华总结
【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类中?
答:
因为锁对象可以是任意类型的对象






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2