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)

大家都在看

  • MySQL45讲之更新缓存

    本文介绍 MySQL的更新缓存 Change Buffer,以及唯一索引和普通索引如何选择。 唯一索引和普通索引的选择 查询过程 在唯一索引下,查询索引树,找到第一个匹配的行并返回…

    数据库 2023年5月24日
    093
  • 【大厂面试必备系列】滑动窗口协议

    引言 想象一下这个场景:主机 A 一直向主机 B 发送数据,不考虑主机 B 的接收能力,则可能导致主机 B 的接收缓冲区满了而无法再接收数据,从而导致大量的数据丢包,引发重传机制。…

    数据库 2023年6月6日
    0119
  • 文件传输工具:FileZilla的使用

    FileZilla FileZilla 是一款高效的 FTP 客户端工具。FileZilla 可以帮助您将本地计算机上的文件上传到虚拟主机实例中。 FileZilla 界面介绍 如…

    数据库 2023年6月11日
    095
  • redis cluster和hash slot

    redis cluster介绍 从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代。 redis cluster 支撑 N …

    数据库 2023年6月9日
    0159
  • SQL语句大全–SQL

    前言 本片博客使用mysql数据库进行数据操作,使用Navicat for mysql 这个IDE进行可视化操作。每个SQL语句都是亲身实验验证的,并且经过自己的思考的。能够保证s…

    数据库 2023年5月24日
    065
  • LeetCode 344. 反转字符串

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 //输入一个字符串,输出它的倒序字符串 input: Hello output: olleH …

    数据库 2023年6月11日
    087
  • 注解

    注解概述 从 JDK5 开始,Java 增加对 元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解…

    数据库 2023年6月15日
    0103
  • Java学习-第一部分-第二阶段-项目实战:坦克大战【1】

    坦克大战【1】 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 坦克大战游戏 为什么写这个项目✔好玩✔涉及到ja…

    数据库 2023年6月11日
    081
  • 云数据库技术|“重磅升级”后再测 TDSQL-C

    标题 1.摘要 前段时间,测试了国内主要云原生数据库 PolarDB、TDSQL-C、GaussDB 的性能,参考:《再测云原生数据库性能》。在上次测试结果中,由于地域版本差异,腾…

    数据库 2023年6月11日
    085
  • mysql中group by,having,order by,limit,distinct的用法和简单的的多表查询

    group:组 by:通过 group by :通过….。分组group by列名:通过指定列来分组 一般情况下在题目中出现 “每个” &#82…

    数据库 2023年6月16日
    0122
  • Javaweb08-Ajax项目-分页条件查询 + 增删改

    1、登录 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: $(function(){ //使用jQuery的Aj…

    数据库 2023年6月16日
    0111
  • Java基础七—Java并发基础

    一个类在可以被多个线程安全调用时就是线程安全的。 线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类: 不可变、绝对线程安全、相对线程安全、线程兼容和…

    数据库 2023年6月6日
    0256
  • Python第五十一天 python2升级为python3

    Python第五十一天 python2升级为python3 公司使用的生产环境系统是centos7,所以这里以centos7系统为基础,讲解将python2升级为python3的方…

    数据库 2023年6月9日
    084
  • 贪心算法原理及其应用

    概述 贪心算法应该算是那种”只闻其声不见其人”的算法,我们可能在好多地方都会听到贪心算法这一概念,并且它的算法思想也比较简单就是说算法只保证局部最优,进而达…

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

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

    数据库 2023年5月24日
    089
  • mysql data local的使用导入与导出数据到.txt

    一、先创建表 CREATE TABLE stu(id INT UNSIGNED AUTO_INCREMENT,NAME VARCHAR(15) UNIQUE, / 唯一约束 , 可…

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