当前位置: 首页 > news >正文

多线程的介绍

一、多线程

1.多线程的常用方法

  1. start():①启动线程②调用线程的run()

  2. run():将线程要执行的操作声明在run()中

  3. currentThread():获取当前代码执行对应的线程

  4. getName():获取线程名

  5. setName():设置线程名

  6. sleep(long millis):静态方法,调用时可以使得当前线程睡眠的毫秒数

  7. yield():一旦执行该方法,就会释放CPU的执行权(静态方法)

  8. join():在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,线程a才结束阻塞状态继续执行

  9. isAlive():判断当前线程是否存活

其他方法(不太建议使用):

  1. stop():强行结束一个线程的执行,直接进入死亡状态

  2. void suspend()/ void resume():可能造成死锁

2.线程的优先级

Thread类内部优先级有三个常量:

-MAX_PRIORITY(10):最高优先级

-MIN_PRIORITY(1):最低优先级

-NORM_PRIORITY(5):普通优先级,默认情况下main具有普通优先级

3.多线程的生命周期

新建(New)、就绪(Runnable)、运行(RUNNINg)、阻塞(Blocked)、死亡(Dead)。

4.解决线程的安全问题

1.同步代码块
synchronized(同步监视器this/odj【可以使用static方式保证唯一性】...)
{//需要被同步的代码
}

说明:①需要被同步的代码即为操作共享数据的代码;

②共享数据即为多个线程都需要操作的数据;

③需要被同步的代码在被synchronized包裹之后,就使得一个线程在操作这些代码的过程中,其他线程必须等待。

④同步监视器俗称锁,哪个线程获得了锁哪个线程就能执行需要被同步的代码。

⑤同步监视器可以使用任何一个类的对象充当,但是多个线程必须共用同一个同步监视器。

注意:①在实现Runnable接口中,同步监视器可以考虑使用this;

②在继承Thread类方式接口中,同步监视器需要慎用this。

2.同步方法

如果操作共享数据的代码完整的声明在了一个方法中,那么可以将此方法声明为同步方法即可。

public synchronized  void  show()//非静态,此时同步监视器为this
{//需要被同步的代码
}
​
​
public static  synchronized  void  show()//静态,此时同步监视器为当前类本身,是唯一的
{//需要被同步的代码
}
3.synchronized的好处&弊端

好处:解决了线程的安全问题

弊端:在操作共享数据时,多线程其实是串行执行,性能低。

相关文章:

  • 2024Python二级
  • arcgis中.mpk和.lpk以及.mxd文件
  • 09 string的实现
  • python和shell脚本,每隔五分钟将远端服务器中的文件夹数据下载到跳板机
  • 1千多条中医中药知识及问答ACCESS\EXCEL数据库
  • 微信添加好友频繁的误区有哪些?
  • 第一章 深度学习发展概述
  • 代码随想录算法训练营day14 | 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代
  • Nodejs 第五十四章(net)
  • 讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
  • R语言基础的代码语法解译笔记
  • 通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展
  • 2024蓝桥杯每日一题(区间合并)
  • pdf也可以制作成可翻页的电子书吗?
  • sensitive-word 敏感词 违规文字检测
  • 【技术性】Search知识
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • express + mock 让前后台并行开发
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript 基本功--面试宝典
  • Laravel 菜鸟晋级之路
  • 包装类对象
  • 技术发展面试
  • 开发基于以太坊智能合约的DApp
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何使用 JavaScript 解析 URL
  • 听说你叫Java(二)–Servlet请求
  • hi-nginx-1.3.4编译安装
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (1)svelte 教程:hello world
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4) PIVOT 和 UPIVOT 的使用
  • (ibm)Java 语言的 XPath API
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)hibernate配置管理
  • (附源码)ssm码农论坛 毕业设计 231126
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (循环依赖问题)学习spring的第九天
  • (转)C#调用WebService 基础
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)创业的注意事项
  • .gitignore文件_Git:.gitignore
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET分布式缓存Memcached从入门到实战
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET是什么
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件