A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2019-5-5 16:54  /  2420 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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()没有线程唤醒不会自己醒。
回复 使用道具 举报

1.多线程的实现有几种方式?实现步骤分别是怎样的?
答:
有两种;
1、继承Thread类;
步骤:1、继承Thread类 2、重写run() 方法 3、创建继承Thread类的子类 4、调用start()方法启动线程
2、实现Runnable接口;
步骤:1、实现Runnable接口 2、重写run() 方法 3、创建线程任务对象 4、创建Thread对象将线程任务传递进去 5、调用start() 方法 启动线程

2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
答:
继承Thread类的run()方法不强制重写。实现Runnable接口的run()方法强制重写
实现Runnable接口的优势:1、不占用继承位  2、解耦。将线程对象和线程任务分开

3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
答:
多个线程执行共同的资源,并进行写操作
可以使用同步代码块(锁是任意对象,但是要保证使用的是同一个对象)、同步方法(锁是this,静态方法的锁是类.class)、Lock锁,三种方式来解决

4.sleep()方法和wait()方法的区别?
答:
sleep()方法是等带睡眠时间结束后自动苏醒。wait()方法是一定要有线程的唤醒,不然就不会醒。
sleep()方法只是去CPU的执行权,锁不会丢失。wait()方法是CPU的执行权和锁都丢失。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马