当前位置: 首页 > 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 敏感词 违规文字检测
  • Docker下部署自己的LNMP工作环境
  • iOS | NSProxy
  • Javascript弹出层-初探
  • Js基础知识(四) - js运行原理与机制
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mysql 数据库四种事务隔离级别
  • React+TypeScript入门
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • TypeScript实现数据结构(一)栈,队列,链表
  • V4L2视频输入框架概述
  • Vue UI框架库开发介绍
  • 创建一种深思熟虑的文化
  • 关于 Cirru Editor 存储格式
  • 聚类分析——Kmeans
  • 前嗅ForeSpider采集配置界面介绍
  • 我看到的前端
  • 阿里云服务器如何修改远程端口?
  • ​​​​​​​​​​​​​​Γ函数
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #FPGA(基础知识)
  • (¥1011)-(一千零一拾一元整)输出
  • (二)学习JVM —— 垃圾回收机制
  • (分布式缓存)Redis分片集群
  • (三十五)大数据实战——Superset可视化平台搭建
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net对接阿里云CSB服务
  • [Android学习笔记]ScrollView的使用
  • [ANT] 项目中应用ANT
  • [C++]模板与STL简介
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [hdu4622 Reincarnation]后缀数组
  • [IE技巧] IE 中打开Office文件的设置
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目