关于多线程:面试题多线程精华版

0次阅读

共计 1405 个字符,预计需要花费 4 分钟才能阅读完成。

多线程有什么用?

 当初咱们的电脑的 CPU 都是多外围的,如果咱们还是采纳单线程的形式去编程,那么咱们电脑上的 CPU 外围只有一个会被利用上,其余都都会被闲置。为了进步 cpu 外围的利用率,咱们能够采纳多线程编程。让每个外围在同一时刻都只能有一个线程在下面运行。好比,你雇佣了 4 个工人,如果你只交代了一个工作,那么这四个工人中,只会有一个工人在工作,其余三个就被闲置了,是资源的节约。如果咱们同时安排四个工作,或者更多的工作,那么这四个工人就都会被利用上。也就进步了咱们的工作效率了。

线程和过程有什么区别?

  1. 一个线程只能属于一个过程;而一个过程能够领有多个线程(至多只有一个);线程依赖于过程而存在。
  2. 过程是零碎资源分配的最小单位,而线程是 CPU 调度的最小单位。
  3. 进行领有独立的内存单元,而多个线程共享进行的内存资源。
  4. 过程编程调试简略牢靠,然而创立、切换、销毁开销大;而线程编程则恰恰相反。
  5. 过程之间不会相互影响,一个过程的宕机,并不会影响到其余过程;然而一个过程中的一个线程的挂掉,可能就是导致其余线程也会挂掉。

Java 实现多线程有哪几种形式?

  1. 继承 Thread 类实现多线程。
  2. 实现 Runnable 接口实现多线程。
  3. 应用 ExecutorServicde、Callable、Future 实现有返回值的多线程。

启动线程办法 start() 和 run() 有什么区别?

只有调用了 start() 办法,才是真正开启多线程,此时多个线程的 run() 体内的代码会同时执行。然而如果只是执行 run(),那么定义的多个 run() 体内的代码还只是在同一个线程中按程序挨个执行。

一个线程的生命周期有哪几种状态?它们之间如何流转的?

  1. NEW:就是刚刚创立的线程,还没有被调用。
  2. RUNNABLE:即曾经进入能够运行的状态,或者曾经正在运行的线程。
  3. BLOCKED:还没获取到锁,被阻塞的线程。例如碰到 synchronized 关键字。
  4. WAITING:示意线程处于有限期待的状态,调用了 Object.wait()、Thread.sleep()、Thread.join() 办法,期待唤醒
  5. TIMED_WAITING:示意线程处于无限工夫期待的状态的,调用了 Object.wait(long millions)、Thread.sleep(long millions)、Thread.join(long millions) 办法
  6. TERMINATED:示意线程曾经执行结束了。须要留神的是,线程一旦进行 RUNNABLE,就无奈回到 NEW 状态了。一旦进入了 TERMINATED 状态,就无奈回到任何其余状态了。

    举荐文章:https://learn.lianglianglee.c…

Java 多线程 sleep 和 wait 的区别?

  • 应用方面:sleep 属于 Thread 类的办法,而 wait 属于 Object 类的办法;sleep() 能够在任意中央应用,而 wait 只能在同步办法或代码块中应用。
  • CUP 及锁资源开释:
    sleep()、wait() 都会暂定以后线程,让出 CPU 的执行工夫。然而 sleep() 并不会开释锁,而 wait() 办法会开释锁资源。
  • 异样捕捉方面:sleep 须要捕捉或抛出异样,而 wait() 办法则不须要。

Java 实现多线程的几种办法

  1. 同步办法:用 synchronized 关键字润饰的办法。
  2. 同步代码块:用 synchronized 关键字润饰的代码块。
  3. 同步变量:应用 volatile 润饰的变量
  4. 重入锁。
正文完
 0