意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

java - 面试题-多线程精华版_个人文章

来源:恒创科技 编辑:恒创科技编辑部
2024-01-30 08:45:59
多线程有什么用?
现在我们的电脑的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修饰的变量重入锁。什么是线程死锁,如何避免线程死锁?

一个线程或者多线程同时被阻塞,他们中的一个或者多个都在等待某个资源的释放。由于线程被无限期的阻塞,程序不能正常的结束。


java - 面试题-多线程精华版_个人文章

Java多线程之间如何进行通信的?多个线程通过synchronized关键字这种方式来实现线程间的通信while轮询配合volatile关键字的方式wait/notify机制线程怎样拿到返回结果?

实现Callable接口,结合ExecutorService、future拿到返回结果

violatile关键字的作用?保证可见性:即一个线程对变量的修改,其他线程可以立即看到。可以禁止指令重排序,保证了原子性。Java如何保证线程的执行顺序?

使用Thread.join()方法

怎么控制同一时间只有3个线程运行?

Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。

为什么要使用线程池?

过多的线程创建和销毁会大量的浪费系统资源,这个时候我们可以采用线程池的方式来复用已经创建的线程。而不是创建一个线程,用完就丢了。这样可以极大的节省系统资源。

Java中常见的几种线程池?
上一篇: Spring注解 下一篇: 手机怎么远程登录云服务器?