------------------吴齐宾-------------------------
1.多线程的实现有几种方式?实现步骤分别是怎样的?
两种,
1)继承Thread类
继承Thread类,然后创建子类的对像,重写run方法有子类的对象名去调用start();
2)实现Runnable接口
实现Runnable接口,重写run的方法.然后创建实现类的对像,将对像放入Thread方法中当做参数,得到一个对像返回值,将返回的对像去调用start方法
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
1)实现Runnale更适用于多个线程去调用同一个的资源
2)没有继承Thread类的局限性
3)将线程和任务分离,实现解耦性
3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
1)线程安全问题是因为我们调用多个线程去改写同一资源,导致我们得到的结果和我们预期的结果或者单线程的结果不一致
2)使用线程同步synchronized解决线程安全问题
3)有三种方式,1.同步代码块
2.同步方法
3.锁机制
4.sleep()方法和wait()方法的区别?
sleep()方法,是带锁休眠,当时间到了之后会自动带锁去cpu争夺资源
wait()方法是将锁抛出,任务停止,等待别的程序去唤醒,唤醒之后还要继续和其他的线程争抢锁,才能进入任务代码块
5.线程有几种状态?他们之间是如何转化的?
有6种状态,开始,运行,停止,阻塞,睡眠等待,无线等待 |