java基础的多线程

java基础的多线程文章目录 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

大家好,我是讯享网,很高兴认识大家。



文章目录

  • 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.介绍下进程和线程的关系

进程:一个独立的正在执行的程序

线程:一个进程的最基本的执行单位,执行路径

image.png

多进程:在操作系统中,同时运行多个程序

多进程的好处:可以充分利用CPU,提高CPU的使用率

多线程:在同一个进程(应用程序)中同时执行多个线程

多线程的好处:提高进程的执行使用率,提高了CPU的使用率

注意:

  1. 在同一个时间点一个CPU中只可能有一个线程在执行
  2. 多线程不能提高效率、反而会降低效率,但是可以提高CPU的使用率
  3. 一个进程如果有多条执行路径,则称为多线程程序
  4. Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程
  5. 一个线程可以理解为进程的子任务

2.说说Java中实现多线程的几种方法

Thread对象就是一个线程

创建线程的常用三种方式:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口(JDK1.5>=)
  4. 线程池方式创建

  通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程,不过实现Runnable
接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法返回值,可以声明抛出异
常而已。因此将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式
之间的主要差别如下。

继承Thread类

实现的步骤:

  1. 创建Thread类的子类
  2. 重写run方法
  3. 创建线程对象
  4. 启动线程

案例代码

 
讯享网 

注意点:

  1. 启动线程是使用start方法而不是run方法
  2. 线程不能启动多次,如果要创建多个线程,那么就需要创建多个Thread对象

image.png

实现Runnable接口

  在第一种实现方式中,我们是将线程的创建和线程执行的业务都封装在了Thread对象中,我们可以通过Runable接口来实现线程程序代码和数据有效的分离。

讯享网

实现的步骤:

  1. 创建Runable的实现类
  2. 重写run方法
  3. 创建Runable实例对象(通过实现类来实现)
  4. 创建Thread对象,并把第三部的Runable实现作为Thread构造方法的参数
  5. 启动线程
 

实现Runable接口的好处:

  1. 可以避免Java单继承带来的局限性
  2. 适合多个相同的程序代码处理同一个资源的情况,把线程同程序的代码和数据有效的分离,较好的体现了面向对象的设计思想

Callable的方式

  前面我们介绍的两种创建线程的方式都是重写run方法,而且run方法是没有返回结果的,也就是main方法是不知道开启的线程什么时候开始执行,什么时候结束执行,也获取不到对应的返回结果。而且run方法也不能把可能产生的异常抛出。在JDK1.5之后推出了通过实现Callable接口的方式来创建新的线程,这种方式可以获取对应的返回结果

小讯
上一篇 2025-01-02 23:16
下一篇 2024-12-26 09:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2157.html