JAVA面试题---线程篇(一)线程

1.并行与并发的区别?

  • 并行:多个处理器或多核处理器同时处理多个任务
  • 并发:多个任务在同一个CPU核上,按细分的时间片轮流执行,从逻辑上来看这些任务是同时执行的。

 

2.线程和进程的区别

一个程序下至少有一个进程,一个进程下至少有一个线程。一个进程下也可以有多个线程来增加程序的执行速度。

 

3.守护线程是什么?

守护线程是运行在后台的一种特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。在JAVA中垃圾回收线程就是特殊的守护线程。

 

4.创建线程有那几种方法?

  1. 继承 Thread 类 重写run方法
  2. 实现Runnable接口
  3. 实现Callable接口

5.Runnable 和  Callable  的区别?

Runnable没有返回值,Callable 可以拿到返回值,Callable可以看作是Runnable的补充。

 

6.线程状态有哪些?

  1. NEW  尚未启动
  2. RUNNABLE  正在执行中
  3. BLOCKED  阻塞的(被被同步锁或IO锁阻塞)
  4. WAITING  永久等待状态
  5. TIMED_WAITING 等待指定的时间重新被唤醒的状态
  6. TERMINATED  执行完成

7.sleep()  和  wait()  的区别?

  • 类不同:sleep()  来自Thread, wait()  来自Object.
  • 释放锁:sleep()  不释放锁;wait()  释放锁。
  • 用法不同:sleep()  到时间会自动恢复;wait()  可以使用 notify()  /  notifyAll()  直接唤醒。

8.notify()  和 notifyAll()  的区别?

notifyAll()会唤醒所有的线程,notify只会唤醒一个线程。

notifyAll()调用后,会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。notify()  只会唤醒一个线程,具体唤醒哪一个线程由虚拟机控制。

9.线程的run()  与  srart()  有什么区别?

start()方法用于启动线程, run()  方法用于执行线程的运行时代码,run() 可以重复调用,start() 只能调用一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值