一、 多线程的三个特性。
- 1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(SCV,synchronized);
- 2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);
- 3.有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。
二、请你简要说明一下线程的基本状态以及状态之间的关系?
- Running表示运行状态;
- Runnable表示就绪状态(万事俱备,只欠CPU)
- Blocked表示阻塞状态,阻塞状态又有多种情况,可能是因为调用wait()方法进入等待池,也可能是执行同步方法或同步代码块进入等锁池,或者是调用了sleep()方法或join()方法等待休眠或其他线程结束,或是因为发生了I/O中断。
- Dead表示当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。

请你解释一下什么是线程池(thread pool)?
在面向对象编程中,创建和销毁对象是很费时间的,所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
三、举例说明同步和异步
线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低
线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制。
四、引起线程上下文切换的原因
1、当前执行任务的时间片用完之后,系统CPU正常调度下一个任务
2、当前执行任务碰到IO阻塞,调度器将此任务挂起,继续下一任务
3、多个任务抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续下一任务
4、用户代码挂起当前任务,让出CPU时间
5、硬件中断

本文详细探讨了Java多线程的各个方面,包括线程的三个特性、线程状态、线程池的概念、同步与异步的区别、锁的类型、线程同步方法,以及synchronized与Lock的比较。此外,还讨论了线程池的优势、线程同步策略和监视器的内部运作,深入解析了线程同步方法与同步代码块的差异,并提供了创建线程的不同方式及其优缺点。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



