1.多线程的实现有几种方式?实现步骤分别是怎样的?
答 ; 两种,分别是继承Thread类和实现Runnable接口
继承Thread类;
1. 定义一个MyRunnable类 继承Thread类
2.重写run()方法
3.创建MyRunnable类对象
4.启动线程
实现Runnable接口
1.定义一个MyRunnable类实现Runnable接口
2.重写run()方法
3.创建MyRunnable类对象
4.创建Thread类的对象,把MyRunnable对象作为构造方法的参数
5.启动线程
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
答: 1.避免了JAVA单继承的局限性 , 解放了继承位
2.适合多个相同的程序代码去处理同一个资源的情况 , 把线程和程序的代码 数据有限的分离, 较好的体现了面向对象的设计思想
3.将线程任务和线程对象分离
3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
答: 是由是否是多线程环境 , 是否有共享数据 , 是否有多条语句操作共享数据来决定是否有线程安全问题
可以通过同步代码块, 同步方法,Lock锁来解决线程安全问题
4.sleep()方法和wait()方法的区别?
答:
1.sleep和wait都是线程阻塞方法,sleep是Thread类的方法,wait是Object类的方法。
2.sleep调用之后会放弃CPU执行权,但是不会放弃锁对象;Wait CPU执行权和锁对象都放弃
3.sleep方法到了时间自动苏醒,去抢夺CPU;wait方法没有线程唤醒不会自己醒
|