文章目录
- 1.介绍下进程和线程的关系
- 2.说说Java中实现多线程的几种方法
- 3.如何停止一个正在运行的线程
- 4.介绍下线程中的常用方法
-
- 1.start方法
- 2.run方法
- 3.getName方法
- 4.优先级
- 5.sleep方法
- 6.isAlive
- 7.join
- 8.yield
- 9.wait和notify/notifyAll
- 5.介绍下线程的生命周期java基础的多线程
- 6.为什么wait, notify和notifyAll这些方法不在thread类里面?
- 7.为什么wait和notify方法要在同步块中调用?
- 8.synchronized和ReentrantLock的区别
- 9.什么是线程安全
- 10.Thread类中yield方法的作用
- 11.常用的线程池有哪些
- 12. 简述一下你对线程池的理解
- 13.线程池的拒绝策略有哪些?
- 14.线程安全需要保证几个基本特性?
- 15.说下线程间是如何通信的?
- 16.说说ThreadLocal的原理
- 17.解释下:同步、异步、阻塞、非阻塞
- 18.什么是BIO?
- 19.什么是NIO?
- 20.什么是AIO?
- 21.介绍下IO流的分类

1.介绍下进程和线程的关系
进程:一个独立的正在执行的程序
线程:一个进程的最基本的执行单位,执行路径

多进程:在操作系统中,同时运行多个程序
多进程的好处:可以充分利用CPU,提高CPU的使用率
多线程:在同一个进程(应用程序)中同时执行多个线程
多线程的好处:提高进程的执行使用率,提高了CPU的使用率
注意:
- 在同一个时间点一个CPU中只可能有一个线程在执行
- 多线程不能提高效率、反而会降低效率,但是可以提高CPU的使用率
- 一个进程如果有多条执行路径,则称为多线程程序
- Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程
- 一个线程可以理解为进程的子任务
2.说说Java中实现多线程的几种方法
Thread对象就是一个线程

创建线程的常用三种方式:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(JDK1.5>=)
- 线程池方式创建
通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程,不过实现Runnable
接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法返回值,可以声明抛出异
常而已。因此将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式
之间的主要差别如下。
继承Thread类
实现的步骤:
- 创建Thread类的子类
- 重写run方法
- 创建线程对象
- 启动线程
案例代码
讯享网注意点:
- 启动线程是使用start方法而不是run方法
- 线程不能启动多次,如果要创建多个线程,那么就需要创建多个Thread对象

实现Runnable接口
在第一种实现方式中,我们是将线程的创建和线程执行的业务都封装在了Thread对象中,我们可以通过Runable接口来实现线程程序代码和数据有效的分离。
讯享网
实现的步骤:
- 创建Runable的实现类
- 重写run方法
- 创建Runable实例对象(通过实现类来实现)
- 创建Thread对象,并把第三部的Runable实现作为Thread构造方法的参数
- 启动线程
实现Runable接口的好处:
- 可以避免Java单继承带来的局限性
- 适合多个相同的程序代码处理同一个资源的情况,把线程同程序的代码和数据有效的分离,较好的体现了面向对象的设计思想
Callable的方式
前面我们介绍的两种创建线程的方式都是重写run方法,而且run方法是没有返回结果的,也就是main方法是不知道开启的线程什么时候开始执行,什么时候结束执行,也获取不到对应的返回结果。而且run方法也不能把可能产生的异常抛出。在JDK1.5之后推出了通过实现Callable接口的方式来创建新的线程,这种方式可以获取对应的返回结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2157.html