共计 1405 个字符,预计需要花费 4 分钟才能阅读完成。
多线程有什么用?
当初咱们的电脑的 CPU 都是多外围的,如果咱们还是采纳单线程的形式去编程,那么咱们电脑上的 CPU 外围只有一个会被利用上,其余都都会被闲置。为了进步 cpu 外围的利用率,咱们能够采纳多线程编程。让每个外围在同一时刻都只能有一个线程在下面运行。好比,你雇佣了 4 个工人,如果你只交代了一个工作,那么这四个工人中,只会有一个工人在工作,其余三个就被闲置了,是资源的节约。如果咱们同时安排四个工作,或者更多的工作,那么这四个工人就都会被利用上。也就进步了咱们的工作效率了。
线程和过程有什么区别?
- 一个线程只能属于一个过程;而一个过程能够领有多个线程(至多只有一个);线程依赖于过程而存在。
- 过程是零碎资源分配的最小单位,而线程是 CPU 调度的最小单位。
- 进行领有独立的内存单元,而多个线程共享进行的内存资源。
- 过程编程调试简略牢靠,然而创立、切换、销毁开销大;而线程编程则恰恰相反。
- 过程之间不会相互影响,一个过程的宕机,并不会影响到其余过程;然而一个过程中的一个线程的挂掉,可能就是导致其余线程也会挂掉。
Java 实现多线程有哪几种形式?
- 继承 Thread 类实现多线程。
- 实现 Runnable 接口实现多线程。
- 应用 ExecutorServicde、Callable、Future 实现有返回值的多线程。
启动线程办法 start() 和 run() 有什么区别?
只有调用了 start() 办法,才是真正开启多线程,此时多个线程的 run() 体内的代码会同时执行。然而如果只是执行 run(),那么定义的多个 run() 体内的代码还只是在同一个线程中按程序挨个执行。
一个线程的生命周期有哪几种状态?它们之间如何流转的?
- NEW:就是刚刚创立的线程,还没有被调用。
- RUNNABLE:即曾经进入能够运行的状态,或者曾经正在运行的线程。
- BLOCKED:还没获取到锁,被阻塞的线程。例如碰到 synchronized 关键字。
- WAITING:示意线程处于有限期待的状态,调用了 Object.wait()、Thread.sleep()、Thread.join() 办法,期待唤醒
- TIMED_WAITING:示意线程处于无限工夫期待的状态的,调用了 Object.wait(long millions)、Thread.sleep(long millions)、Thread.join(long millions) 办法
-
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 实现多线程的几种办法
- 同步办法:用 synchronized 关键字润饰的办法。
- 同步代码块:用 synchronized 关键字润饰的代码块。
- 同步变量:应用 volatile 润饰的变量
- 重入锁。
正文完