1.多线程的实现有几种方式?实现步骤分别是怎样的?
多线程的实现方法有两种:
第一种是类继承Thread类:定义一个类继承Thread类 -> 在子类重写run 方法 -> 创建子类对象,启动线程
第二种是实现Runnable接口:定义一个类实现Runnable接口 -> 在实现类中重写run方法 -> 创建实现类对象 -> 创建Thread类对象,把实现类对象作为参数传入 -> 启动线程
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
区别:
继承Thread类可以不重写run方法,实现Runnable接口一定要重写run方法
实现Runnable接口的优势:
(1)避免了Java单继承的局限性
(2)适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的体现了面向对象的设计思想
3.线程安全问题是怎么产生的?如何解决线程安全问题,有哪几种方式?
产生:当多个线程对同一个资源进行访问,并对这个资源进行写操作时,会出现线程安全问题
解决:
(1)同步代码块
(2)同步方法
(3)Lock锁
4.sleep()方法和wait()方法的区别?
sleep()方法是让一个线程暂停指定毫秒时间,时间到了会继续运行
wait()方法是让一个线程执行等待操作,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法才能继续运行
|