五步搞定Java开发环境部署,电子版已问世
Posted 爱看动漫的Java程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五步搞定Java开发环境部署,电子版已问世相关的知识,希望对你有一定的参考价值。
一、背景
我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商 App 上经常出现的秒杀活动、限量优惠券抢购,还有我们去哪儿网的火车票抢票系统等,这些场景有一个共同特点就是访问量激增,虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是平时的数倍以上,为了避免并发问题,防止库存超卖,给用户提供一个良好的购物体验,这些系统中都会用到锁的机制。
对于单进程的并发场景,可以使用编程语言及相应的类库提供的锁,如 Java 中的 synchronized 语法以及 ReentrantLock 类等,避免并发问题。
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与显式锁,再到并发安全,三天快速掌握并发编程核心知识,成为并发大神!
你以为这样就完了?更多并发相关资料,一并奉上!
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以免费送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!有需要的朋友戳这里即可免费获取
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了,各位读者朋友们快来免费获取吧
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了,各位读者朋友们快来免费获取吧*
[外链图片转存中…(img-5k8krJ0M-1620814811143)]
以上是关于五步搞定Java开发环境部署,电子版已问世的主要内容,如果未能解决你的问题,请参考以下文章
五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程