A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【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类中?
答:
因为锁对象可以是任意类型的对象

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马