1.多线程的实现有几种方式?实现步骤分别是怎样的?
答:2种。
第一种是继承Thread类,4个步骤:
(1)定义一个类MyThread继承Thread类
(2)类中重写run()方法(不是强制的)
(3)在测试类中创建类MyThread的线程对象
(4)调用start()方法启动线程
另一种是实现Runnable接口,5个步骤:
(1)定义一个类MyThread实现Runnable接口
(2)类中重写run()方法(是强制的)
(3)在测试类中创建类MyThread的任务对象
(4)创建Thread线程对象,把MyThread的任务对象传递进去
(5)调用start()方法启动线程
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
答:区别在于继承Thread类的线程对象和线程任务是同一个,不强制重写run()方法;
实现Runnable接口的线程对象和线程任务不是同一个,必须重写run()方法。
实现Runnable接口的优势体现在:
(1)将线程任务和线程对象分离,进行解耦。可以实现多个线程共享同一资源。
(2)不占用继承位。
3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
答:当多个线程共享同一个资源,并执行写操作的时候,会产生线程安全问题。
要解决线程安全问题,就要破坏掉线程安全环境,有三种方式:
(1)同步代码块
(2)同步方法,分为普通同步方法和静态同步方法
(3)Lock锁
4.sleep()方法和wait()方法的区别?
答:sleep()和wait()都是线程阻塞方法,sleep()是Thread类的方法,wait()是Object类的方法。
sleep()调用之后会放弃CPU执行权,但是不会放弃锁对象;wait()调用之后是CPU执行权和锁对象都放弃。
sleep()到了时间自动苏醒,去抢夺CPU执行权;wait()没有线程唤醒不会自己醒。 |