【后端面经-Java】Java创建线程的方法简介

端面,java,创建,线程,方法,简介 · 浏览次数 : 89

小编点评

## 线程的基本概念 1.1 线程:线程是计算机中的最小调度单元,一个进程可以有多个线程,执行并发操作,提高任务的运行效率。 1.2 线程状态和生命周期: * 新建 (new):线程创建而尚未启动的阶段。 * 就绪态 (runnable/ready):线程已经启动,等待CPU资源分配运行态。 * 运行态 (running):线程分配到CPU资源,正式运动阻塞态 (blocked):在运行过程中由于存在资源缺乏等原因,进入阻塞态等到资源条件满足,再次执行;等待态 (waiting):线程进入I/O等操作或者线程执行 sleep()、join() 或 wait(timeout) 方法时,等待响应,这时候进入等待态,其他线程可接着执行;超时等待 (timed waiting):线程进入超时等待态类似于等待态,但是有时间限制,等待时间到了,线程会自动进入就绪态,等待CPU资源调度;终止态 (terminated):线程执行完毕或者出现异常,进入终止态,线程生命周期结束。 ## 创建线程的四种方法 2.1 继承Thread类:重写run()方法,实现线程的创建。 2.2 实现Runnable接口:实现Runnable接口,实现线程的创建。 2.3 实现Callable接口:可接受结果(有返回值)的Callable接口和Runnable接口类似,可接受结果,可以检查异常。 2.4 使用线程池:使用ThreadPoolExecutorExecutors创建线程的优点: * 减少每个任务的调用开销 * 限制和管理系统资源消耗能够提高线程异步执行的性能

正文

1. 线程的基本概念

1.1 线程

学过操作系统的同学应该不陌生,线程是计算机中的最小调度单元,一个进程可以有多个线程,执行并发操作,提高任务的运行效率

1.2 线程状态和生命周期

  1. 线程状态包括:
  • 新建(new):线程创建而尚未启动的阶段;
  • 就绪态(runnable/ready):线程已经启动,等到CPU资源分配
  • 运行态(running):线程分配到CPU资源,正式运动
  • 阻塞态(blocked):在运行过程中由于存在资源缺乏等原因,进入阻塞态等到资源条件满足,再次执行;
  • 等待态(waiting):线程进入I/O等操作或者线程执行 sleep()、join() 或 wait(timeout) 方法时,,等待响应,这时候进入等待态,其他线程可接着执行;
  • 超时等待(timed waiting):线程进入超时等待态类似于等待态,但是有时间限制,等待时间到了,线程会自动进入就绪态,等待CPU资源调度;
  • 终止态(terminated):线程执行完毕或者出现异常,进入终止态,线程生命周期结束。
  1. 线程生命周期如图所示:
  • 3. 阻塞态 vs 等待态
    • 阻塞态:因为某些资源问题而引起,线程在阻塞态的时候,其他线程无法执行。
    • 等待态: 一般不是由于资源问题而是线程本身的操作而引起,线程在等待态的时候,其他线程可以执行。

2. 创建线程的四种方法

2.1 继承Thread类

Java.lang.Thread类是java的线程类,类中包括一些线程基本信息和线程操作函数,通过对Thread类的继承,重写run()方法,可以实现线程的创建。

2.2 实现Runnable接口

不继承Thread类,而是初始化Thread类,实现Runnable接口,实现线程的创建。

2.3 实现Callable接口

Callable接口Runnable接口类似,都是实现线程的创建,Callable接口可接受结果(有返回值),且可以检查异常。

2.4 使用线程池

使用线程池创建线程的优点如下所示:

  • 减少每个任务的调用开销
  • 提供一种可行方法,限制和管理系统资源消耗
  • 能够提高线程异步执行的性能

两种创建方式:

  • ThreadPoolExecutor
  • Executors

:关于具体的代码解释,以后有机会再补充,各位也可以根据下面的参考博客进行学习。

3. 参考资料

参考博客-1
参考博客-2

与【后端面经-Java】Java创建线程的方法简介相似的内容:

【后端面经-Java】Java创建线程的方法简介

本文简要介绍了java中创建线程的四种方式,并介绍了线程概念,适合新手阅读。

【后端面经-java】java线程池满的处理策略

本文对java线程池做了具体介绍,并且讨论了java线程池满了之后的拒绝策略。

【后端面经-Java】Java基本概念

【不定期更新】本文主要介绍了Java学习前期的一些概念问题,包括“面向对象和面向过程的区别”、“C++和Java的不同之处”等等,适合初学者学习。

【后端面经-Java】I/O多路复用 简录

本文主要介绍了Java当中常见的几种IO模型,介绍其运行机制和实际缺点,并进行技术对比,对于IO多路复用的实现方式进行分析。

【后端面经-Java】HashMap详解

本文详细介绍了hashmap,包括基本概念、hashmap数据结构、关键变量和重要方法,并且结合源码进行分析。

【后端面经-Java】Synchronize和ReentrantLock区别

本文介绍了Synchronize和ReentrantLock同步锁的相似和不同点,并指出两者的主要特点和适用场景。

【后端面经-Java】AQS详解

本文介绍了AQS的核心思想、基本架构、实现方法,并对框架中的重要源码方法进行介绍和分析

【后端面经-Java】公平锁和加锁流程

本文主要介绍了公平锁和非公平锁的概念和区别,并且结合Reentranslock锁的源码对加锁机制进行分析。

【后端面经-Java】JVM内存分区详解

本文主要介绍了JVM内存分区的基本情况,着重介绍了栈、堆、方法区的分区情况,并给出实际代码解释内存分配的过程。

【后端面经-Java】JVM垃圾回收机制

本文对JVM垃圾回收机制做了详细解释,从"where"、"which"、"when"、"why"、"how"、"who"的角度,重点介绍JVM垃圾回收机制的触发机制、垃圾判断算法、垃圾回收算法和垃圾回收机制。