1.多线程的实现有几种方式?实现步骤分别是怎样的?
第一种:继承Thread类实现
步骤:
1.创建Thread类的子类,继承Thread类.
2.重写Thread类的run方法
3.创建子类对象
4.调用Thread类的Start方法,开启多线程任务,执行run方法.
第二种:实现Runnable接口
步骤:
1.创建Runnable接口的实现类,并重写run方法
2.创建一个实现类对象
3.创建一个Thread类对象,并将实现类对象作为参数传入
4.调用Thread类对象的Start方法,开启多线程任务,执行run方法.
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
如果一个类继承Thread类,则不适合资源共享,而实现Runnable接口的话,则比较容易进行资源共享.
优势好处体现在:
1.避免了单继承的局限性
2.增加了程序的拓展性,耦合度更低,实现解耦操作.
3.适合多个相同代码的线程共享同一个资源
3.线程安全问题是怎么产生的?如何解决线程安全问题,有哪几种方式?
线程安全问题产生的原理:多个线程共享同一个资源,同时执行同一个资源的数据,就会出现线程安全问题
三种:
1.同步代码块方式(重点)
2.同步方法(包含静态方法)
3.Lock锁
4.sleep()方法和wait()方法的区别?
区别:
1.wait来源于Object类中的方法,sleep来源于Thread类中的方法
2.wait方法被调用时,会归还锁对象和释放CPU执行权.而sleep方法被调用时,只会释放CPU执行权
|