简述创建线程的两种方式
- 格式:doc
- 大小:20.50 KB
- 文档页数:1
进程线程练习题一、选择题1. 进程是指()。
a) 线程的集合b) 代码的集合c) 资源的集合d) 程序的集合2. 线程是指()。
a) 进程的集合b) 代码的集合c) 资源的集合d) 程序的集合3. 在操作系统中,多个进程可以通过()来实现并发执行。
a) 共享内存b) 进程间通信c) 线程d) 同步操作4. 下列关于进程和线程的说法中,错误的是()。
a) 进程是资源分配的最小单位b) 线程是程序执行的最小单位c) 进程之间是相互独立的d) 线程之间共享内存空间5. 在Java中,可以创建线程的两种方式是()。
a) 继承Thread类、实现Runnable接口b) 实现Thread类、继承Runnable接口c) 实现Thread接口、继承Runnable类d) 继承Thread类、实现Callable接口二、填空题1. 进程间通信的方式有()。
2. 线程可以共享的资源有()。
3. 线程调度的方式包括()和()。
三、简答题1. 请简述进程和线程的概念及区别。
2. 进程间通信的方式有哪些,各自的优缺点是什么?3. 线程调度的方式有哪些,各自的优缺点是什么?4. 请举例说明多线程的优势以及适用场景。
四、编程题请使用Java语言编写一个多线程程序,实现以下功能:1. 创建两个线程T1和T2,分别打印出1~5和6~10的数字。
2. 要求线程T1和T2交替执行,即先打印数字1,然后打印数字6,接着打印数字2,再打印数字7,以此类推。
3. 在程序中使用合适的同步机制来实现线程的交替执行。
答案:一、选择题1. a) 线程的集合2. b) 代码的集合3. b) 进程间通信4. d) 线程之间共享内存空间5. a) 继承Thread类、实现Runnable接口二、填空题1. 管道通信、消息队列、共享内存、信号量、套接字通信等2. 内存空间3. 抢占式调度、协同式调度三、简答题1. 进程是操作系统进行资源分配和调度的基本单位。
1、JAVA语言有哪些特点特点:简单性、面向对象技术、分布性、健壮性、安全性、体系结构中立、可移植性、解释执行、高性能、多线程..完全面向对象、平台无关性、多线程2、JAVA平台是什么其运行原理是什么与一般操作平台的不同JAVA平台:由JAVA虚拟机和JAVA核心类构成;为JAVA程序开发提供编程接口且与具体的操作系统无关的平台..运行原理:JAVA代码由编译器编译成字节代码文件;然后由JAVA解释器解释执行其字节文件..与一般操作平台的不同:JAVA是解释执行程序;编译后产生的文件中不含有硬件信息;并且其支持跨平台的运行..3、字节码好处字节码:经过JAVA编译器编译后;与特定机器无关;需要解释器才能执行的中间代码..好处:字节码中不包含有硬件信息;为JAVA跨平台的运行提供了基础..4、什么是变量名变量名与变量值有什么区别变量是用来标识一块内存区域..变量名是一个标识符;用来引用一块内存区域;变量值是内存区域中存储的值..5、什么是表达式什么是语句两者之间有什么异同表达式是用运算符及操作元连接符合一定语法规则的式子;语句是一个表达式最后加上一个分号..异同:语句是程序的组成部分;表达式是语句的组成部分;语句有结束符;表达式没有结束符;语句是针对程序而言的;表达式是数学上的计算概念;算式的计算结果“=”在右边;赋值语句“=”在表达式的左边..6、Break和Continue语句的区别Break语句是跳出整个循环;并且不执行循环体内的程序;而Continue 语句则是跳出此次循环;还可以继续执行循环体..7、Do……while语句和While语句的区别Do……while 语句是先执行一次循环体的内容再判断;而While则是先判断然后再执行循环体的内容..8、什么是类如何定义一个类类中包含了哪几部分;分别是什么类是某些对象共同特征的表示;是对象的抽象..定义一个类需要在定义类的结构中包含类的声明和类的实体..类在语法上包含了类的声明和类体两个部分;其中类的声明部分由关键字class与类名组成;类体中包含变量的说明;方法的定义与实现两个部分..9、什么是对象如何创建对象对象是类的具体;是操作的直接对象..创建对象需要借助new操作符和构造函数配合使用;一般格式为:类名对象名 = new 类名10、什么是构造方法构造方法有那些特点构造方法是一个类方法中方法名与类名相同的类方法;其作用是当使用new关键字创建对象时;自动调用并对新建对象进行初始化操作..构造方法特点:a.构造方法与类名相同b.构造方法没有返回值;不定义返回类型c.构造方法可以重载;针对参数数量和类型定义多个同名构造方法d.构造方法可以继承;子类可以继承父类的构造方法e.构造方法不是由编程人员显式调用;其在对象创建时由new运算符自动调用f.构造方法只用来对类实例进行初始化;目的在于简化初始化操作11、如何对对象进行初始化对象的初始化是在对象创建完之后用构造方法对其进行初始化的操作;该操作的一般语法为类名对象名 = new 构造方法12、静态方法与非静态方法的区别静态方法与非静态方法的语法上的区别在于是否被static关键字修饰a.非静态方法可以对静态变量和非静态变量操作;而静态方法只能对静态变量进行操作b.静态方法可以有对象调用也可以由类名直接调用;而非静态方法只能由对象调用c.一个类中的方法可以互相调用;但静态方法只能调用静态方法;不能调用非静态方法d.创建对象之前;非静态方法没有入口13、final成员变量和方法有什么特点final成员变量一般在声明是进行初始化;一旦最终成员变量被赋值;则在整个程序执行过程中都不能被改变;final方法不能被重复定义或者更改方法内容;即被重载..14、什么是类的封装如何对成员变量和方法的访问权限的设置以达到数据封装的目的类的封装是指类的设计者为使用者提供类对象可以访问的部分;而对于类中其余的成员变量和方法隐藏起来;用户不能访问..可以通过public、protected、private、默认四种控制符来实现数据封装的目的..15、子类能够继承父类的哪些成员变量和方法子类中可以继承父类中的public和protected成员..16、多态中的重载和覆盖有什么不同覆盖是子类对父类同名方法的重定义;其方法名同而方法内容不同;重载是指在类中创建多个方法;它们具有相同的名称但有不同的参数和不同的实现..17、如何来制作图形界面它需要引入哪些包制作图形界面首先要创建一个窗口容器并在窗口中添加各种组件;接着在指定组件属性和在窗口中的位置;构成图形界面的外观效果;然后定义图像界面的事件和各种组件对不同事件的响应;从而实现图形界面和用户的交互..需要引用的包有:AWT、Swing18、在Java中什么是事件简述处理事件的机制..事件是指人机交互所产生的交互内容;其代表某对象可执行的操作及其状态变化..处理事件的机制:事件源根据触发事件产生一个事件对象;事件对象传递参数并调用监听器相应的处理方法..19、什么是布局器;它有什么作用布局管理器就是一个用来安排其他容器和基本组件的对象..其主要是用来安排和管理其它组件在窗口中的位置..20、何为异常为什么要进行异常处理异常是指程序运行过程中出现的非正常..良好的应用程序除了具备用户所要求的功能外还应该具备预见性并处理可能发生的各种各种异常功能..21、Error和Exception类有什么不同Error类是处理内部系统错误;Exception类是解决程序本身及其环境所产生的异常..Exception类可以被捕获和处理;Error类异常只能在发生时由用户按照系统提示关闭程序..22、什么是抛出异常如何抛出异常抛出异常是指在程序过程中通过throw语句以“throw new 异常类名”的格式抛出异常..异常名可以选择系统异常类名;也可以使用自定义异常类名..23、什么是TCP/IP协议它有什么特点TCP/IP协议;传输控制协议\因特网互联协议;其是一个基于连接的协议;提供两台计算机之间的可靠的数据流..特点:A.开放的协议标准;可免费使用;并且独立于特定的计算机硬件与操作系统B.独立于特定的网络硬件;可以运行在局域网、广域网;更适用于互联网中C.统一的网络地址分配方案;使整个TCP/IP设备在网中都具有唯一的地址D.标准化的高层协议;可以提供多种可靠的用户服务24、一个完整的URL的地址由哪几部分组成一个完整的URL可分为四个部分:资源类型、存放资源的主机域名、资源文件名和端口..25、URL连续从服务器上读取一个文本文件;并显示该文本文件的内容实例化URL对象->实例化URLConnection对象->实例化InputStreamReader对象->实例化BufferReader对象26、简述Socket通信机制;说明客户端如何与服务器进行连接..Socket通信机制:A.服务器生成一个ServerSocket实例对象;随时监听客户端的连接请求B.客户端生成一个Socket实例对象;并发出连接请求C.服务器端通过accept方法接受到客户端的请求后;开辟一个端口与进行连接;并生成所需的I/O数据流D.通信通过一对InputStream和OutputStream进行通信;通信结束后;两端分别关闭对应的Socket接口27、简述URL与Socket通信的区别..URL和Socket通信的区别:A.通信方式:Socket在服务器端运行通信程序;不停地监听客户端连接请求;使服务器能够在接受到请求时马上与客户端连接并通信;URL进行通信时;被动等待客户端的请求..B.连接数:Socket服务器可以同时与多个客户端进行相互通信;URL 通信服务器每次只能与一个客户端进行通信..28、何为线程和多线程如何建立多线程线程是一个程序内部的顺序控制流;多线程是在同一个应用程序中有多个顺序控制流同时执行..创建线程有两种方法:继承Thread类、通过定义实现新Runnable接口..29、线程的生命周期由哪几种状态各状态之间分别用哪些方法切换线程的生命周期有:就绪、可运行、不可运行、终止四种..就绪->可运行:start可运行->可运行:yield可运行->不可运行:sleep、wait不可运行->可运行 : 阻塞解除、睡眠时间终止、唤醒可运行->终止:run。
一、选择题1、下列哪些声明是错误的(C D)A、class AB、public class AC、protected class AD、private class A2、下列哪个是JA VA应用程序主类中正确的main()方法声明。
Public static void main(string args[ ])3、下列哪个是JDK提供的编译器。
Javac.exe4、下列叙述哪些是正确的(A C D)A、final类不可以有子类B、abstract类中只可以有abstract()方法C、abstract类中可以有非abstract()方法,但该方法不可以用final修饰D、不可以同时使用final和abstract修饰一个方法二、填空题1、当线程处于新建状态时,线程调用isAlive()方法返回值是false。
当线程进入死亡状态后(实体内存被释放),线程仍可以调用方法isAlive(),这时返回的值是false。
2、建立线程有2种方法。
3、线程的优先级可以通过setPriority( )方法调整。
4、一个线程执行完run()方法后进入死亡状态,该线程不能再调用Start()方法。
5、JFrame类的默认布局是BorderLayout布局。
6、当代码量较大时,采用行尾编程风格。
7、Java源文件的扩展名是.java,Java字节码的扩展名是.class。
8、类中的实例变量在创建对象时被分配内存空间。
三、判断题1、True不能是标识符。
2、True和false不是Java的关键字。
3、父类的final()方法不允许子类重写。
4、构造方法可以重载。
5、类中的实例方法可以操作变量,类方法不可以操作实例变量。
6、类中的实例方法不可以用类名直接调用。
7、一个容器对象不可以使用add()方法添加一个Frame窗口。
8、在接口中不能声明变量。
9、在接口中不能定义非抽象方法。
10、内部类的外嵌类的成员变量在内部类中仍然有效。
线程练习题答:有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop,是因为它不安全。
它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。
结果很难检查出真正的问题所在。
suspend方法容易发生死锁。
调用suspend 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。
此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。
对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。
所以不应该使用suspend,而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。
若标志指出线程应该挂起,便用wait命其进入等待状态。
若标志指出线程应当恢复,则用一个notify重新启动线程。
2、sleep 和 wait 有什么区别?答:sleep是线程类的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。
调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。
3、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
答:如果数据将在线程间共享。
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
4、启动一个线程是用run还是start?答:启动一个线程是调用start方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
蓝桥JavaSE面试题总结目录第一章初识Java (1)1.Java跨平台原理(字节码文件、虚拟机) (1)2.Java的安全性 (1)3.Java三大版本 (2)4.Java开发运行过程 (2)5.Java开发环境配置 (2)6.什么是JVM?什么是JDK?什么是JRE? (2)7.Java三种注释类型 (3)第二章数据类型和运算符 (4)1.8种基本数据类型及其字节数 (4)2.i++和++i的异同之处 (4)3.&和&&的区别和联系,|和||的区别和联系 (5)4.用最有效率的方法算出2乘以8等于多少 (5)5.基本数据类型的类型转换规则 (5)第三章流程控制 (7)1.三种流程控制结构 (7)2.if多分支语句和switch多分支语句的异同之处 (7)3.while和do-while循环的区别 (7)4.break和continue的作用 (7)5.请使用递归算法计算n! (8)6.递归的定义和优缺点 (8)第四章数组 (9)1.数组的特征 (9)2.请写出冒泡排序代码 (9)3.请写出选择排序的代码 (10)4.请写出插入排序的代码 (10)5.可变参数的作用和特点 (11)第五章面向对象 (12)1.类和对象的关系 (12)2.面向过程和面向对象的区别 (12)3.方法重载和方法重写(覆盖)的区别 (12)4.this和super关键字的作用 (13)5.static关键字的作用(修饰变量、方法、代码块) (13)6.final和abstract关键字的作用 (13)7.final、finally、finalize的区别 (14)8.写出ng.Object类的六个常用方法 (14)9.private/默认/protected/public权限修饰符的区别 (14)10.继承条件下构造方法的执行过程 (15)11.==和equals的区别和联系 (15)12.多态的技能点(前提条件,向上转型、向下转型) (16)13.接口和抽象类的异同之处 (16)14.简述Java的垃圾回收机制 (16)第六章异常处理 (18)1.Error和Exception的区别 (18)2.Checked异常和Runtime异常的区别 (18)3.Java异常处理try-catch-finally的执行过程 (18)4.异常处理中throws和throw的区别 (19)第七章常用工具类 (20)1.基本数据类型和包装类 (20)2.Integer与int的区别 (20)3.String类为什么是final的 (21)4.String、StringBuffer、StringBuilder区别与联系 (21)5.String类型是基本数据类型吗?基本数据类型有哪些 (21)6.String s="Hello";s=s+"world!";执行后,s内容是否改变? (21)7.String s = new String("xyz");创建几个String Object? (22)8.下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; (22)9.java.sql.Date和java.util.Date的联系和区别 (23)10.使用递归算法输出某个目录下所有文件和子目录列表 (23)第八章集合 (25)1.Java集合体系结构(List、Set、Collection、Map的区别和联系) (25)2.Vector和ArrayList的区别和联系 (26)3.ArrayList和LinkedList的区别和联系 (26)4.HashMap和Hashtable的区别和联系 (26)5.HashSet的使用和原理(hashCode()和equals()) (26)6.TreeSet的原理和使用(Comparable和comparator) (27)7.集合和数组的比较(为什么引入集合) (27)8.Collection和Collections的区别 (27)第九章IO流 (28)1.输入流和输出流联系和区别,节点流和处理流联系和区别 (28)2.字符流字节流联系区别;什么时候使用字节流和字符流? (28)3.列举常用字节输入流和输出流并说明其特点,至少5对。
2023年光大银行java面试题光大银行是一家知名的商业银行,在全国范围内拥有大量的分支机构和客户群体。
该银行对于招聘人才时注重技术能力和专业素养,因此在面试中通常会采用一系列的技术问题来评估应聘者的能力。
以下是我整理的一些光大银行2023年面试中可能会问到的Java方面的问题。
1.什么是Java语言,你对Java有了解吗?答:Java是一种面向对象的高级编程语言,具有平台独立性、跨平台特性。
它广泛应用于创建各种类型的应用程序,包括网络应用、企业应用和嵌入式系统等。
我对Java有一定的了解,并且在大学期间学习了Java相关课程并实践了一些项目。
2. Java有哪些特点?答:Java的特点有:面向对象、平台独立、跨平台、可移植性好、安全性高、多线程、自动内存管理、丰富的类库等。
3.什么是面向对象编程?答:面向对象编程是一种编程方式,它将问题划分为对象,通过对象之间的交互来解决问题。
面向对象编程有三个基本特点:封装、继承和多态。
4.什么是封装?答:封装是将数据和操作数据的方法进行组合的一种机制。
通过封装,可以将数据隐藏在类的内部,对外提供接口来访问和操作数据,提高了代码的复用性和安全性。
5.什么是继承?答:继承是指一个类可以派生出其他类,派生类可以继承基类的属性和方法。
通过继承,可以实现代码的复用和扩展。
6.什么是多态?答:多态是指同一个方法在不同的对象上有不同的表现形式。
具体表现为使用父类的引用变量指向子类的对象,然后通过这个引用变量来调用相同的方法,但是所调用的方法可能表现出不同的行为。
7. Java中的异常处理机制是什么?答:Java中的异常处理是通过try-catch-finally语句块来实现的。
try块中包含可能抛出异常的代码,catch块用于捕获并处理异常,finally块用于执行无论是否发生异常都必须执行的代码。
8.请简述Java中的常用的集合类?答:Java中常用的集合类有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。
Java基础试题姓名一、选择题(每题2分,共30分)1.请写出标识符的命名规则描述正确的是[多选](ABCD )A、由英文字母、数字、_和$组成,长度不限。
B、标识符的第一个字符不能是数字C、标识符区分大小写。
D、标识符不能包含空格。
2. 下列属于正确标识符的选项有[多选](BDGH)A. intB. $_CountC. 3MD. HelloE. b-7F. ms#dG. boolH. D96583、下列哪一个不属于java的基本类型( B )A、intB、StringC、floatD、byte4、下列那条语句能编译通过( A )A、String String=”String”;B、float float=”3.14”;C、int int = 11;D、int i= 1.1;5、下列代码的执行结果是: ( D )public class Test1{public static void main(String args[]){float t=9.0f;int q=5;System.out.println((t++)*(--q));}}A、40B、40.0C、36D、36.06、int长度描述正确的是(A )A、-2^31到2^31 - 1B、-2^32到2^32 - 1C、-2^7到2^7 - 1D、-2^8到2^8 - 17、关于==和equals方法描述不正确的是( D )A、==是运算符、equals是方法B、==只比较对象,equals会先比较对象,如果不是一个对象,会对对象的值进行比较。
C、String a= "1"; String b= "1"; System.out.println(a==b); 输出结果为:trueD、String a=new String("1");String b=new String("1");System.out.println(a==b);输出结果为:true8、下列关于哪个不属于java的特性( D )A、封装B、继承C、多态D、重载9、某一个子类要继承一个父类,要使用关键字(B )A、importB、extendsC、implementsD、java10、某一个子类要实现一个父接口,要使用关键字(C )A、importB、extendsC、implementsD、java11、以下关于接口和类的说法正确的是( C )A、接口和类都可以实现多重继承B、子类可以继承多个父类C、子类可以实现多个接口D、一个子类不能同时继承某一个父类和实现某一个接口12、一个非抽象子类,如果要实现某个接口,则(A )A、必须实现该接口中的所有抽象方法B、可以实现部分抽象方法C、可以不实现任何抽象方法D、无所谓13、下列关于Java线程的说法那些是正确的( D )A、每一个Java、线程可以看成由代码.一个真实的CPU以及数据三部份组成。
第一章思考题】1、简述path 环境变量的作用。
2、请说说你对JVM 的理解。
答案】1、path 环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔。
当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path 环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错。
2、JVM 是Java Virtual Machine 的缩写,全称是Java 虚拟机。
Java 语言的一个非常重要的特性就是跨平台性,而Java 虚拟机是实现这一特性的关键。
不同的操作系统需要使用不同版本的虚拟机,这种方式使得Java语言能够“一次编写,到处运行”。
Java语言编译程序只需生成在Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
第二章【思考题】1、请简述& 与&& 的区别。
2、简述break、continue 和return 语句的区别。
【答案】1、&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
当运算符“ &”和“ && ”的右边为表达式时,使用“ &”进行运算,不论左边为true 或者false,右边的表达式都会进行运算。
如果使用" && ”进行运算,当左边为false时,右边的表达式则不会进行运算,因此“ && ”被称作短路与。
2、break 语句:在switch 条件语句和循环语句中都可以使用break 语句。
当它出现在switch 条件语句中时,作用是终止某个case并跳出switch结构。
第五章多线程选择题1. 线程调用了sleep()方法后,该线程将进入( C )状态。
A.可运行状态B.运行状态C.阻塞状态D.终止状态2. 关于java线程,下面说法错误的是(D)A.线程是以CPU为主体的行为B. java利用线程使整个系统成为异步C.创建线程的方法有两种:实现Runnable接口和继承Thread类D. 新线程一旦被创建,它将自动开始运行3.在java语言中,临界区可以是一个语句块,或者是一个方法,并用(A )关键字标识。
A.synchronizedB.includeC.importD.Thread4. 线程控制方法中,yield()的作用是(D)A.返回当前线程的引用B.使比其低的优先级线程执行C.强行终止线程D.只让给同优先级线程运行5. java用(A)机制实现了进程之间的异步执行A.监视器B.虚拟机C.多个CPUD.异步调用6. 下面代码运行的结果是什么?(D)public class MyThread implements Runnable {String myString = "Yes ";public void run() {this.myString = "No ";}public static void main(String[] args) {MyThread t = new MyThread();new Thread(t).start();for (int i=0; i < 10; i++)System.out.print(t.myString);}}A. 打印yes yes yes yes yes yes B. 打印no no no no no no no noC. 打印yes no yes no ye no ye no D. 不确定二、填空题1.____多线程____是java程序的并发机制,它能同步共享数据、处理不同的事件。
当看到这个题,很多同学都能回答上来,但是确实很“简述”:1,继承Thread类。
2,实现Runnable接口。
面试官会问你:“完了?”
你自信满满的答:“完了。
”
面试官估计会接着对你说:“完了就完了吧,那我们今天的面试也就这样完了吧......”
大家应该记住,在面试官问你任何技术问题时,你一定要把你知道的全说出来,最好还能说出一些他不知道的。
那我们接下来看看这道题应该怎样答:
1,继承Thread类,复写run方法,创建该类对象,调用start方法开启线程。
2,实现Runnable接口,复写run方法,创建该类对象,将该对象当作参数传给Thread类的构造方法,再创建Thread类对象,使用Thread类对象调用start方法开启线程。
回答到此处,其实已经差不多了,但是你要的是凸显自己的实力,如果愿意,可以再说说他们两种方式的差别:
第一种方式,继承Thread类,线程任务和线程对象绑定在一起,耦合性(紧密联系程度)高。
不便于维护。
第二种方式,实现Runnable接口,线程任务在实现Runnable接口的类中,线程对象是Thread类对象,线程任务和线程对象相分离,耦合性底,便于维护。
我觉得回答到此处,面试官会惆怅的对你说:”好了,我们来谈谈工资吧......"。
为什么他会惆怅呢?应为你比他知道的还多。