线程相关

Java多线程实现方式

继承Thread,实现Runnable接口,实现Callable接口(能抛异常且有返回值,不常用)

为什么有了继承Thread方式还要有Runnable接口方式

实现接口的方式适合多个相同程序代码的线程去处理同一个资源,可以避免Java中单继承的限制

为什么JVM启动是多线程的?

因为至少启动了两个线程:主线程、垃圾回收线程

线程和进程的含义

进程:是操作系统资源分配的基本单位,正在运行的程序

线程:是任务调度和执行的基本单位,程序使用CPU的最基本单位

多线程和多进程的含义

多进程:操作系统能同时运行多个任务即程序

多线程:同一程序中有多个顺序流在执行

并发和并行的含义

并行:逻辑上同时发生,一段时间内同时运行多个程序

并发:物理上同时发生,一个时间点同时运行多个程序

线程和进程的区别

不同点  进程 线程
一个进程里有多个线程
内存 不共享内存 共享内存
资源 进程间共享文件网络资源 线程间不共享
开销 进程需要分配内存,开销较大 线程只需要分配栈和一个PC,开销较小
独立 可以独立存在 可以独立,必须依赖进程而存在
作用 进程是CPU资源分配的最小单位 线程是CPU调度的最小单位
通信 进程间的通信比较复杂因为它的数据空间独立性,需要通过操作系统,基于socket的进程间的通信机制 而线程间的通信由于多线程共享地址空间和数据空间,可直接通信,不必通过操作系统(内核的调度)

线程调度模型

分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片

抢占式调度模型:优先让优先级高的线程使用CPU,获得CPU时间片也越多,Java使用此模型

线程间通信——生产者消费者模式

生产者:先看是否有数据,有就等待消费者消费(wait),没有就生产,生产完后通知消费者消费

消费者:先看是否有数据,有就消费,没有就等待生产者生产,通知生产者生产数据(notify)

Java线程调度方式

线程睡眠:Thread.sleep(long millis),使线程转换到阻塞状态,当睡眠结束后,就转为就绪状态

线程等待:Object.wait(),导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()

线程唤醒:Object.notify()方法,唤醒在此对象上等待的单个线程。

线程让步:Thread.yield(),暂停当前正在执行的线程对象,把执行机会让给相同或更高优先级的线程

线程加入:join(),等待其他线程终止

线程状态

初始状态:创建一个线程

就绪状态:线程调用start()方法

运行状态:线程被CPU调度

阻塞状态:放弃CPU使用权,暂停完毕后变回就绪状态(同步阻塞,等待阻塞,其他阻塞)

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

线程状态转换

测试必备之Java知识(四)—— 线程相关的更多相关文章

  1. 测试必备之Java知识(三)—— 集合、Map相关

    集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接 ...

  2. 测试必备之Java知识(二)—— Java高级的东西

    Java高级 类加载过程 加载(创建class对象) -> 连接(验证-准备-解析) -> 类初始化 类加载器类别 根类加载器:加载java核心类 扩展类加载器:加载JRE目录中的jar包 ...

  3. 测试必备之Java知识(一)—— Java基础

    Java基础 Java如何运行的? 开发的java源代码,通过javac编译成为平台无关的字节码文件(class),然后通过JVM的解释器将字节码解释成对应的机器码 “一次编译,到处运行”的理解 说的 ...

  4. Android开发学习必备的java知识

    Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...

  5. 面试4——java进程和线程相关知识

    1.线程和进程的概念.并行和并发的概念

  6. Java多线程(四) 线程池

    一个优秀的软件不会随意的创建.销毁线程,因为创建和销毁线程需要耗费大量的CPU时间以及需要和内存做出大量的交互.因此JDK5提出了使用线程池,让程序员把更多的精力放在业务逻辑上面,弱化对线程的开闭管理 ...

  7. Java多线程(四) —— 线程并发库之Atomic

    一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下 ...

  8. java 之Thread线程相关yield()、sleep()、wait()、join()、run和start方法详解

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  9. 重学JAVA基础(四):线程的创建与执行

    1.继承Thread public class TestThread extends Thread{ public void run(){ System.out.println(Thread.curr ...

随机推荐

  1. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)

    [注]:  popstate 事件 a.当活动历史记录条目更改时,将触发popstate事件. b.如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对his ...

  2. H3C开启telnet服务

    [H3C]Telnet server enable       //开启telnet服务

  3. 2019-8-31-C#-匹配可空变量

    title author date CreateTime categories C# 匹配可空变量 lindexi 2019-08-31 16:55:58 +0800 2019-06-01 08:40 ...

  4. koa2--05.koa-bodyparser中间件的使用,处理post数据

    首先在项目文件夹下使用cmd,输入: npm install --save koa-bodyparser //koa koa-bodyparser中间件的使用 --post提交数据 const koa ...

  5. 什么是神经网络 (Neural Network)

    反向传播: 可以看作是再一次将传过来的信号传回去, 看看这个负责传递信号神经元对于”讨糖”的动作到底有没有贡献, 让它好好反思与改正, 争取下次做出更好的贡献. 生物神经网络和人工神经网络的差别: 人 ...

  6. 力扣90——子集 II

    原题 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], ...

  7. appium启动app(android)

    android ​ Appium 启动APP至少需要5个参数 ​ 'platformVersion','deviceName'.'appPackage'.'appActivity'.'platform ...

  8. 别怕,"卷积"其实很简单(下)

        文章来自我的CSDN同名博客,欢迎文末扫码关注~   定义 基于上一篇文章的通俗化例子,我们从基本概念上了解了卷积,那么更严格的定义是怎样的呢? 从数学上讲,卷积只不过是一种运算,对于很多没有 ...

  9. 【转载】你不知道的 console,让 JS 调试更简单

    对于前端工程师,肯定不会对console陌生,但是,又能深入了解多少呢? Chrome控制台-开发者工具 windows按F12, MAC按Command + Option + C或Command + ...

  10. 【学习笔鸡】整体二分(P2617 Dynamic Rankings)

    [学习笔鸡]整体二分(P2617 Dynamic Rankings) 可以解决一些需要树套树才能解决的问题,但要求询问可以离线. 首先要找到一个具有可二分性的东西,比如区间\(k\)大,就很具有二分性 ...