Java 第三个模块 多线程面试题

1.并行和并发有什么区别?

并发:在同一个处理器上,两个或多个事件在同一时间间隔发生。
并行:在不同处理器上,两个或者多个事件在同一时刻发生。
在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
    
    网上有个例子挺形象的:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

2.同步和异步的区别?

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

3.程序、线程和进程的区别?

程序:是含有指令和数据的文件,存在储存设备中,即程序是静态的代码
进程:是一段正在执行的程序。
线程:一个进程中执行中的每个任务为一个线程。线程是进程的一个实体,是cpu调度和分派的基本单位
进程包含线程,进程中可包含多个线程,一个线程只属于一个进程。

4.守护线程是什么?

守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。必须在启动之前设置setDaemon(true),前台线程执行完成后,守护线程才会终止。

5.创建线程有哪几种方式?

. 继承Thread类创建线程类
    定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
    创建Thread子类的实例,即创建了线程对象。
    调用线程对象的start()方法来启动该线程。
②. 通过Runnable接口创建线程类
    定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
    创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
    调用线程对象的start()方法来启动该线程。
③. 通过CallableFuture创建线程
    创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
    创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
    使用FutureTask对象作为Thread对象的target创建并启动新线程。
    调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

6.说一下 runnable 和 callable 有什么区别?

Runnable接口中的run()方法的返回值是
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹泪的知更鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值