首页 > 编程语言 >【后端面经-Java】Java创建线程的方法简介

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

时间:2023-06-20 13:05:42浏览次数:61  
标签:Java Thread 创建 端面 接口 线程 等待

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

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,Thread,创建,端面,接口,线程,等待
From: https://blog.51cto.com/u_15965807/6521799

相关文章

  • JavaScript(06): 优秀JavaScript库概览
    jQuery设计思想简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。优点小,压缩后代码只有20多k(无压缩代码94k)。Selector和DOM操作的方便.Chaining:总是返回一个jQuery对象,可以连续操作。文档的完整,易用性(每个API都有完整的例子,这是其......
  • JavaScript(03): 面向对象
    面向对象的开发方式是目前软件开发的主流方式,JavaScript也是面向对象事件驱动的编程语言,如果能够掌握JavaScript的面向对象编程的知识,就有了构建自己的JavaScript库的基础和前提。1.面向对象的基本概念对于熟悉Java或者C#的开发者来说,面向对象的概念以及封装、继承、多态等名词应......
  • JavaScript(07): 实例2---网页广告漂浮效果(面向对象版)
    在上一个版本的基础上使用JavaScript的面向对象完成,为了不影响阅读,去掉了随滚动条移动的广告<!DOCTYPEhtml><html> <head> <title>Example</title> <metahttp-equiv="content-type"content="text/html;charset=GBK"/> <linktype="......
  • JavaScript(07): 实例3---Google Eye
    下面的例子源于GoogleEye(如下图所示的效果),通过这个例子可以好好体会一下JavaScript的面向对象编程。<!DOCTYPEhtml><html> <head> <title>GoogleEye</title> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <st......
  • JavaScript的对象深度克隆
    Object.prototype.clone=function(){ varnewObj={}; for(variinthis){ if(typeof(this[i])=="object"||typeof(this[i])=="function"){ newObj[i]=this[i].clone(); } else{ newObj[i]=this[i]; } } r......
  • Java面试题集(51-70)
    Java程序员面试题集(51-70)摘要:这一部分主要讲解了异常、多线程、容器和I/O的相关面试题。首先,异常机制提供了一种在不打乱原有业务逻辑的前提下,把程序在运行时可能出现的状况处理掉的优雅的解决方案,同时也是面向对象的解决方案。而Java的线程模型是建立在共享的、默认的可见的可变状......
  • 【后端面经-Java】Java创建线程的方法简介
    目录1.线程的基本概念1.1线程1.2线程状态和生命周期2.创建线程的四种方法2.1继承Thread类2.2实现Runnable接口2.3实现Callable接口2.4使用线程池3.参考资料1.线程的基本概念1.1线程学过操作系统的同学应该不陌生,线程是计算机中的最小调度单元,一个进程可以有多个线程......
  • Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,6] Me
     报错如下:Causedby:javax.xml.stream.XMLStreamException:ParseErrorat[row,col]:[2,6]Message:不允许有匹配"[xX][mM][lL]"的处理指令目标。原因:xml第一行为空行,所以报错 需要将<?xmlversion="1.0"encoding="utf-8"?>放在第一行即可解决问题  ......
  • 20230410 java.util.HashMap
    问题第一部分,基础入门:1.数组的优势/劣势2.链表的优势/劣势3.有没有一种方式整合两种数据结构的优势?散列表4.散列表有什么特点?5.什么是哈希?第二部分,HashMap原理讲解:1.HashMap的继承体系是什么样的?2.Node数据结构分析?3.底层存储结构介绍?4.put数据原理分析?5.什么是Hash碰......
  • 20230411 java.lang.Iterable
    介绍publicinterfaceIterable<T>实现此接口允许对象成为“for-each循环”语句的目标//遍历集合for(Suitsuit:suits)//遍历数组for(inti:a)只有一个抽象方法iterator,是函数式接口方法iterator返回迭代器forEach对Iterable的每个元素执行给......