Java就是个多线程的世界

1. 类的线程安全

我们经常说类是线程安全的,类是线程不安全的。那么什么样的类才是线程安全的?

1.1 定义

多线程环境下,不管不同的线程如何使用和调度这个类,这个类总是表现出正确的行为。那么这个类就是线程安全的。
类的线程安全有两个关键点:
1.操作的原子性
2.内存的可见性。

如果在多个线程中共享状态,当同步机制不正确时,就会出现线程不安全的情况。

简单的程序应该不会有线程安全问题吧?

Q:什么情况下会有线程安全问题

A:当某个实现多线程的线程类中有实例变量时

ps:有状态,无状态对象是什么概念

有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。

无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象 .不能保存数据,是不变类,是线程安全的。

为什么有线程安全问题?必须要先了解计算机原理

当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。

举个例子

从内存读取1M数据 250微妙 = 250000纳秒
CPU读取一次内存 100纳秒

问:从内存中读取1M的int型数据由CPU进行累加,耗时要多久?

答:
1M的数据,Java里int型为32位,4个字节
共有1024*1024/4 = 262144个整数
CPU 计算耗时:262144 *0.6 = 157 286 纳秒

262144个整数从内存读取到CPU,需要耗时
内存读取耗时:262144*100+250000 = 26 464 400 纳秒

怎么解决线程安全问题?

线程安全问题,归根到底一句话:在多线程之间修改共享数据引起的

并发编程——从入门到成仙

为了让大家更好的理解学习线程并发,在这里给大家推荐一个由华为资深架构师Mark老师讲授的《并发编程——从入门到入仙》专题课程!从Java线程入门,到原子操作CAS与显式锁,再到并发安全,三天快速掌握并发编程核心知识,成为并发大神!

你以为这样就完了?更多并发相关资料,一并奉上!

最后

手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都都可提供源文件给每位爱学习的朋友,获取链接:戳这里免费下载

itee.com/vip204888/java-p7)**

[外链图片转存中…(img-wOf9vdbO-1627557266466)]

mysql查看版本命令linux相关推荐

  1. mysql查看版本的方法

    在日常项目开发过程中,我们经常要连接自己的数据库,此时不知道数据库的版本是万万不可的.今天小树懒来给大家总结一下查看mysql版本的方法. MySQL查看版本的方法主要有以下四种 方法1: 没有连接到 ...

  2. Linux命令查看子进程命令,Linux基础命令——查看进程命令

    linux是一个 多进程   多用户的操作系统 ps(显示当前进程的状态) ps -ef  查看当前linux 进程 ps -ef | grep 'mysqld'  过滤mysql的进程 (grep  ...

  3. Imagemagick查看版本命令

    Imagemagick查看版本命令: # 旧版 identify -version 或 convert -version Version: ImageMagick 6.9.7-4 Q16 x86_64 ...

  4. mysql 查看内核版本命令_Linux查看版本命令问题

    展开全部 linux 查看版本62616964757a686964616fe4b893e5b19e31333433626462命令 git版本 git --version git version 1. ...

  5. mysql的删除命令+linux命令大全,Linux环境下MySQL基础命令----查看、创建、删除库和表...

    案例二,查看数据库 MySQL是一套数据库管理系统,支持运行多个库,每个库相当于一个容器,存放着许多表.数据就存在这些表中,所以查看.创建.删除库和表,在工作中必不可少. 一,查看 1,查看当前服务器 ...

  6. mysql 查看版本的命令

    上面2个命令可在mysql客户端和命令行使用 status  只能在mysql命令行使用 mysql -v 只能在mysql服务器使用

  7. 安装mysql查看随机密码命令_linux安装mysql-8.0.21-1.el7.x86_64.rpm-bundle - 君主-bye

    本文参考 一     查看linux操作系统版本和系统内核版本 1 [root@nfs_client ~]# cat /etc/redhat-release 查看操作系统版本 2 CentOS Lin ...

  8. linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  9. mysql查看连接数命令_Mysql 查看连接数,状态

    命令: show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接. show processlist;只列出前100条,如果想全列 ...

最新文章

  1. python pass 占位符 占位语句
  2. 20分钟教你手写Sping MVC
  3. iptables之xtables_addons浅度解析
  4. C# 跨平台的支付类库ICanPay
  5. [html] 说说你对移动优先布局的理解
  6. 华为这个事,是不是刷KPI?
  7. 深度linux专业版,用Deepin 15.5 SP2专业版的不要换源更新,否则会成为未授权版本...
  8. xcode6 使用MJRefresh
  9. OpenCV---膨胀与腐蚀
  10. 横向合计代码 锐浪报表_锐浪报表合并明细网络
  11. 静态路由使用下一跳和出接口的区别,我猜你不知道这一点!
  12. Mac电脑怎么使用ping命令
  13. 如何给PDF文件添加页码
  14. 整理了100个Python精选库,建议收藏
  15. 意外发现一款很好用的开源BI工具——DataEase
  16. 工信部:禁止外资参与网络出版 外国游戏国内要玩完
  17. 废弃CSDN博客声明
  18. 智能家居改装方案学习笔记【双控灯改智能单控灯】2022.05.08
  19. Linux ZRAM的简单介绍
  20. Maya USD 批量改 Variant Sets 批量设置 Active 的小工具(附USD相关链接)

热门文章

  1. 挑战全网最强数据结构期末复习帖
  2. CC150小结概念与算法
  3. 【永艺XY椅】试用体验
  4. 怎么看燃气表中还剩多少气_怎么看燃气表中还剩多少气
  5. C/C++模拟校园卡
  6. 【MATLAB】全局莫兰指数(含p值和z值)
  7. python机器交易_全解用 Python 建立能源市场算法交易的机器学习框架
  8. 【老生谈算法】matlab实现PSO算法程序求解简单的函数极值问题——PSO算法
  9. SpringMVC-配置JSP视图解析器
  10. 王者荣耀云测杯失败总结