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常用语句 3

    1.找出每个部门平均薪水的薪资等级,from后面嵌套子查询第一步是找出每个部门的平均工资。 [En] The first step is to find out the avera…

    数据库 2023年5月24日
    082
  • 一篇文章带你掌握主流基础框架——Spring

    一篇文章带你掌握主流基础框架——Spring 这篇文章中我们将会介绍Spring的框架以及本体内容,包括核心容器,注解开发,AOP以及事务等内容 那么简单说明一下Spring的必要…

    数据库 2023年6月14日
    0108
  • 凤凰架构: 构建可靠的大型分布式系统

    推荐一本好书: 《凤凰架构: 构建可靠的大型分布式系统》–作者:周志明 这是一本开源书,同时也已经出版。有着纸质书、电子书、开源网站文档和Github文档。文末已附上链…

    数据库 2023年6月6日
    0108
  • day04-2发送文件

    多用户即时通讯系统04 4.编码实现03 4.6功能实现-发送文件功能实现 4.6.1思路分析 客户端(发送者): 先把文件a.jpg读取到客户端的字节数组 把文件对应的字节数组封…

    数据库 2023年6月11日
    086
  • 【海量数据算法】如何判断一个数是否在40亿个整数中

    如何判断一个数是否在40亿个整数中 2.1《编程珠玑》给出的方案 我们把40亿个数中的每一个用32位的二进制来表示,假设这40亿个数开始放在一个文件中。 然后将这40亿个数分成两类…

    数据库 2023年6月11日
    091
  • 自然对数

    https://zhuanlan.zhihu.com/p/71928040自然对数 https://www.youtube.com/watch?v=mZE0RmCbDe8 本文来自…

    数据库 2023年6月11日
    0117
  • Minio的安装与使用

    Minio的安装与使用 一、Minio介绍 MinIO 是在 Apache License v2.0 下发布的高性能对象存储. 就是说是个存东西的玩意,比较方便配好启动就能访问,也…

    数据库 2023年6月6日
    0110
  • MySQL InnoDB索引原理

    数据库与I/O原理 数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。 I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数…

    数据库 2023年5月24日
    098
  • 爬虫基础_正则表达式_补

    正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个 “规则字符串”,这个 “规则…

    数据库 2023年6月11日
    0139
  • Java 杂记

    记载 Java 杂项的笔记和零碎的笔记 Java 杂记 一. Java 特性 1.1 封装 属性私有化,提供公共的可以访问的方法 1.2 继承(extends) Java &amp…

    数据库 2023年6月11日
    092
  • 链表(Java)实现

    链表 先给出自定义的list接口,后面几种链表的实现了该接口 public interface List { //统计顺序表元素个数 int size(); //判断顺序表是否为空…

    数据库 2023年6月16日
    089
  • python-memcached学习笔记

    介绍: memcached是免费、开源、高性能、分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用。 数据类型:只用一种字符串类型 1:安装…

    数据库 2023年6月6日
    082
  • 21粤比武

    先进行密码绕过,在这个界面迅速按下方向键,然后按下e进入编辑模式 找到linux16这一行,将lang编码后面的全部删掉,加上 <span class=”ne-text”&g…

    数据库 2023年6月11日
    0104
  • MySQL max() min() 函数取值错误

    今天日志出现异常,一步一步debug发现SQL语句返回值出错,进一步发现是max()函数返回出错。点击跳转解决办法,赶时间的朋友可以去获得答案。当然我还是希望大伙看看原由。 sel…

    数据库 2023年6月16日
    0185
  • DASCTF7月misc–ez_forenisc

    内存镜像解析,得到bitlocker密钥 passware解析内存镜像,得到用户名密码 <span class=”ne-text”>550f37c7748e</s…

    数据库 2023年6月11日
    073
  • 模板语法之标签

    语法 {% &#x5F00;&#x59CB;&#x6807;&#x7B7E; %} …. {% &#x7ED3;&#x675F;…

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