Java 多线程学习笔记

多线程

在单个程序中同时运行多个线程完成不同的工作,称为多线程(提升整体处理性能)

线程是程序的最小单位,相对独立的可调用单元,是 CPU 最小基本单位;

在同一个程序中不同的线程完成功能,称为多线程。(软件中最小单位就是线程)

程序 进程 线程 程序就是一段静态的代码,是应用程序的蓝本 进程是正在运行的程序的实例:进程是程序的一次正常运行,从代码加载到最后一句代码的执行,整个过程就是进程的生命周期 进程中独立、可调用的最小执行单元:线程是程序中一个单一的顺序控制流程

  • 程序与进程的关系:
    一个程序一般只有一个进程,但一个程序可以拥有多个进程
    一个进程只能属于一个程序
  • 进程与线程的关系:
    一个进程拥有多个线程,一个线程只能属于一个进程
    一个程序只有一个主线程

一个程序只有一个主线程:Java 应用程序中主线程就是 main方法,其他的都是子线程

使用 Runnable 接口创建的线程,还是要借用 Thread 类来启动线程

当一个线程对象在 sleep 的时候,可以用过 interrupt()方法强制唤醒,唤醒后会抛出 java.lang.InterruptedException

方法 描述 start() 启动线程(使线程处于就绪状态) run() 线程占用CPU正在运行,业务逻辑写在此方法中 setName() 给线程设置名称 getName() 获取线程名称 setPriority() 设置线程的优先级别:1为最小、5为默认、10为最大 getPriority() 获取线程的优先级 currentThread() 获取当前正在运行的线程 getState() 获取线程状态 sleep() 线程的休眠 interrupt() 线程中断休眠 isInterrupted() 判断线程是否为中断状态 isAlive() 测试线程是否处于活动状态 setDaemon() 把线程设置为守护线程(当程序中其他守护线程结束时,该守护线程也会结束) isDaemon() 判断线程是否为守护线程 join() 等待该线程终止 yield() 暂停当前正在执行的线程,并执行其他线程(包含了自己本身)

wait():线程挂起

notify():唤醒单个线程

notifyAll():唤醒所有线程

wait()方法不稳定必须要加上同步锁
以上三个方法全是 Object 类的方法

作用 优点 缺点 始终保持一个实例 节约内存空间,创建效率高 容易造成线程不安全问题

枚举是 Java 中一种数据类型,相当于常量,但比常量的扩展性强
枚举类型存放在 JVM 的常量池中,永远不会被回收,除非程序关闭
枚举默认是单例,所以构造方法必须私有化
声明枚举的时候,必须固定好实例,枚举的实例必须事先声明

public enum 枚举名称{}

Timer:定时器
TimerTask:定时器任务

线程安全 线程不安全 StringBuffer StringBuilder Vector ArrayList HashTable HashMap

什么样的数据适合放在缓存机制中?

  1. 经常被查询的数据
  2. 不会经常改变的数据,更新的频率不频繁

Original: https://www.cnblogs.com/xiqingbo/p/java-20.html
Author: Schieber
Title: Java 多线程学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598698/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL Bug:No suitable ‘keyring_component_metadata_query’ service implementation found to fulfill the request

    监控发现公司一台MySQL 8.0.26 的错误日志中出现大量下面告警信息: [Warning] [MY-013712] [Server] No suitable ‘k…

    数据库 2023年5月24日
    078
  • jmeter并发设置的原理

    简介 广义并发 绝对并发 简介 ​ 性能测试过程中是否需要进行同步定时器的设置,需要根据实际情况来考虑。 ​ 举个栗子来讲是我们的双十一秒杀活动,这时候就必须实现请求数量达到一定数…

    数据库 2023年6月6日
    069
  • MySQL查询性能优化七种武器之索引潜水

    有读者可能会一脸懵逼? 啥是 索引潜水? 你给它起名字了吗?你有指数蛙泳吗? [En] Did you give it the name? Do you have index br…

    数据库 2023年5月24日
    094
  • 了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?

    面试的时候大家都会碰到缓存的问题,而缓存中必问的就是:缓存雪崩和穿透。而且一出现就会是致命的问题。所以我们一定要做好准备。下面我将为大家总结了一份这两类的问题的解决办法和预防方法。…

    数据库 2023年6月16日
    0104
  • 阿里云服务器中MySQL数据库被攻击

    前几天刚领了一个月的阿里云服务器玩,在里面装了MySQL,然后这几天找了个小项目练习着玩呢,就将表建在里面了。刚访问添加员工还好好的,刚给员工分页查询呢 ,啪一下 ,很突然昂 ,就…

    数据库 2023年6月11日
    071
  • 中文技术文档写作规范

    使用 markdown 格式书写文档 只使用一二三级标题,三级标题下面的并列性内容使用列表展示 二级标题前使用行分隔符表示分隔 段落之间使用一个空行隔开 一句话或者以逗号分隔的句子…

    数据库 2023年6月6日
    074
  • JDBC中常用的类和接口

    DriverManager类 DriverManager类 是JDBC的管理层,用来管理数据库中的 驱动程序。在使用Java操作数据库之前,必须使用 Class类 的 静态方法fo…

    数据库 2023年6月16日
    079
  • Redis集群(一)主从复制

    一、主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由…

    数据库 2023年6月11日
    077
  • SQL优化这5个极简法则,直接让查询原地起飞!

    SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。 查询优化…

    数据库 2023年5月24日
    071
  • 数据库原理一—MySQL基本架构与索引

    MySQL基本架构 Server层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持In…

    数据库 2023年6月6日
    071
  • [LeetCode]21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1-&…

    数据库 2023年6月9日
    089
  • City of stars

    本文来自博客园,作者:ukyo–BlackJesus,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/16747306.html Or…

    数据库 2023年6月11日
    097
  • JVM

    JVM 一、什么是JVM 定义 Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收…

    数据库 2023年6月16日
    051
  • SQL Server2019安装

    检查.NET 环境 打开控制面板下面的程序,选择 启用或关闭 Wind…

    数据库 2023年6月6日
    088
  • Stack

    供自己巩固集合知识时写的笔记,不会对所有的内容都介绍栈(Stack)是一种后进先出(LIFO:Last In First Out)的数据结构 Stack只有入栈和出栈的操作: 把元…

    数据库 2023年6月9日
    066
  • Linux–>组管理和权限管理

    在Linux中的每一个用户必须属于一个组,不能独立于组外。 在Linux中每个文件有, 所有者, 所在组, 其他组的概念 查看文件的所有者 ls -ahl 举例: 改变文件所有者 …

    数据库 2023年6月14日
    0128
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球