首页 > 编程语言 >Java并发编程15

Java并发编程15

时间:2024-09-09 18:25:24浏览次数:9  
标签:状态 Runnable Java Thread 编程 Callable 线程 15 就绪

1、创建线程的有哪些方式

  • 继承 Thread 类创建线程类
  • 通过 Runnable 接口创建线程类
  • 通过 Callable 和 Future 创建线程
  • 通过线程池创建

2、创建线程的三种方式的对比

1、采用实现 Runnable、Callable 接口的方式创建多线程。

**优势是:**线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个 target 对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将 CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

**劣势是:**编程稍微复杂,如果要访问当前线程,则必须使用 Thread.currentThread()方法

2、使用继承 Thread 类的方式创建多线程

**优势是:**编写简单,如果需要访问当前线程,则无需使用 Thread.currentThread()方法,直接使用 this 即可获得当前线程。

**劣势是:**线程类已经继承了 Thread 类,所以不能再继承其他父类。

3、Runnable 和 Callable 的区别

  • Callable 规定(重写)的方法是 call(),Runnable 规定(重写)的方法是 run()。
  • Callable 的任务执行后可返回值,而 Runnable 的任务是不能返回值的。
  • Call 方法可以抛出异常,run 方法不可以。
  • 运行 Callable 任务可以拿到一个 Future 对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过 Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

3、Java 线程具有五中基本状态

1、新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t= new MyThread();

2、就绪状态(Runnable):当调用线程对象的 start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待 CPU 调度执行,并不是说执行了 t.start()此线程立即就会执行;

3、运行状态(Running):当 CPU 开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

4、阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对 CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被 CPU 调用以进入到运行状态。

根据阻塞产生的原因不同,阻塞状态又可以分为三种:

1、等待阻塞:运行状态中的线程执行 wait()方法,使本线程进入到等待阻塞状态;

2、同步阻塞:线程在获取 synchronized 同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

3、其他阻塞:通过调用线程的 sleep()或 join()或发出了 I/O 请求时,线程会进入到阻塞状态。当 sleep()状态超时、join()等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转入就绪状态。

5、死亡状态(Dead):线程执行完了或者因异常退出了 run()方法,该线程结束生命周期。

标签:状态,Runnable,Java,Thread,编程,Callable,线程,15,就绪
From: https://blog.csdn.net/qq_38811830/article/details/142065836

相关文章

  • java基础 -线程(基础)的 笔记
     581,多线程机制 因为需要敌人的坦克可以自由移动并发射子弹,我们的坦克可以移动并发射子弹,这些要用到线程的知识。   根据JConsole监控线程执行情况,发现,主线程执行完了,子线程还没有执行完,并不能表示当前进程死亡了,只有当所有的子线程执行完了,主进程才会结束。 真正......
  • 计算机毕业设计选题推荐-土地承包管理系统-Java/Python项目实战(亮点:数据可视化分析、
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • 计算机毕业设计选题推荐-流浪动物领养管理系统-Java/Python项目实战(亮点:数据可视化分
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • Java 包装类(Wrapper)
    Java包装类(Wrapper)目录Java包装类(Wrapper)1包装类Wrapper概述2Integer类3自动装箱和拆箱4int和String类型的相互转换4.1int转换为String4.2String转换为int1包装类Wrapper概述作用:用于将原始类型(int,char,float等)转换为相应的对象。8个基本类型中的每......
  • java高级:单元测试
    单元测试:针对最小的功能单元(方法),编写测试代码对其进行正确性测试。Junit单元测试框架步骤: publicclassStringUtil{publicstaticvoidprintNumber(Stringname){if(name==null){System.out.println(0);return;//退出方法......
  • 数据库学习笔记(黑马-Javaweb课程)
    概述P80.课程介绍:数据库:存储和管理数据的仓库SQL:操纵做关系型数据库的编程语言数据库管理系统:DBMS,操纵和管理数据库的大型软件课程介绍:数据的的设计,数据库的操作,数据库的优化-索引P81.MySQL-概述-安装配置图文详述:MySQL的下载、安装、配置、使用_mysql下载-CSDN博客语......
  • Java入门:07.Java中的面向对象03
    11this关键字this关键字有两个作用第一个作用,用来调用重载的构造方法publicclassTest3{publicstaticvoidmain(String[]args){newUser();newUser("ls");newUser("ls","女");}}​classUser{Stringname;St......
  • 2-4Java重写与重载
    Java重写与重载重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比......
  • java连接MySQL
    一.下载驱动包java通过JDBC(JavaDatabaseConnectivity)包连接数据库<dependency>  <groupId>com.mysql</groupId>  <artifactId>mysql-connector-j</artifactId>  <version>9.0.0</version></dependency>二.配置数据源(数据库的信息) ......
  • java 关键字
    关键字说明private私有的protected受保护的public公共的default默认abstract声明抽象class类extends扩充,继承final最终值,不可改变的implements实现(接口)interface接口native本地,原生方法(非Java实现)new新,创建static静态strictfp严格,精准synchron......