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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


1.什么是线程,什么是进程?
2.实现多线程有几种方式?哪种比较好,好在哪里?
3.为什么会出现线程安全问题,该如何解决线程安全问题?
4.解决线程安全问题的原理?
5.sleep和wait方法的区别?

1 个回复

倒序浏览
1.什么是线程,什么是进程?
进程是进入系统内存运行的程序,线程是CPU执行代码片段的通道

2.实现多线程有几种方式?哪种比较好,好在哪里?
两种方式:【1】编写一个类直接继承Thread类,重写run方法,再编写一个类,创建继承类对象【2】编写一个类实现Runnable接口 ,重写run方法,再编写一个实现类,创建实现类对象。
实现Runnable接口的方法比较好,因为Thread类也是Runnable接口的实现类,继承Thread类法与重写Runnable接口的效果完全相同,但是每一个类只有一个继承位,继承位是留给共性抽取的,被Thread占用了显得很不划算。继承Thread的话,每一个线程任务就对应了一个线程对象,没有办法使多个线程对象共享一个线程资源。
                  
3.为什么会出现线程安全问题,该如何解决线程安全问题?
线程安全出现的三个前提:【1】需要有多线程环境【2】需要有多个线程对象共享同一个资源【3】多个线程对共享的线程任务进行修改(在一个线程进入执行期间时有其他的线程也进入了run方法)
解决:【1】手动添加一个sleep方法,在线程执行期间放弃CPU执行权,让其他的线程进入。【2】在线程进入前添加一把“锁”,使用synchronized 接口,在一个线程进入执行期间时不让其他线程进入。

4.解决线程安全问题的原理?
sleep方法可作为线程之间的一个CPU执行权的控制,使线程进入一个规定时间的睡眠期,主动放弃CPU的执行权,不让一个线程长期地拥有执行权,而使其他的线程抢夺执行权,平均地分配了线程占有CPU的时间,这就破坏了线程安全的条件。使用synchronized 接口原理相似,使一个线程在执行期间没有其他线程进入。

5.sleep和wait方法的区别?
sleep是Thread中的方法,wait是object中的方法。
区别【1】sleep在设定时间毫秒值过后自动苏醒,而wait需要由一个跟他持有同一个锁对象的线程唤醒。
       【2】sleep在睡眠期间会放弃执行权,但是不会放弃锁对象,会拿着锁对象一起睡(例如在锁中插入sleep,线程会睡着,但是锁对象还存在,其他线程依旧进不来)。而wait会放弃执行权和锁对象,等待唤醒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马