JDK

Hashtable和ConcurrentHashMap如何实现线程安全

大憨熊 提交于 2020-11-24 08:23:52
目录 未做同步控制时,代码在多线程下是安全的吗? HashMap的是线程安全的吗? 那么线程安全的Map-HashTable是如何实现线程安全的呢? 有了HashTable为何还要有个ConcurrentHashMap? ConcurrentHashMap是如何实现线程安全的呢? 未做同步控制时,代码在多线程下是安全的吗? 代码执行都是靠线程调度执行的,默认情况下就是多线程的,所以不做同步控制理论上代码在多线程情况下存在线程安全问题。 我们可以通过对方法和变量操作加锁、使用线程安全的方法和操作方式解决。 HashMap的是线程安全的吗? 非线程安全,本身没有任何线程安全的控制。比如put,remove这些操作都是普通方法。 那么线程安全的Map-HashTable是如何实现线程安全的呢? HashTable在和数据本身操作的方法上都加了一个synchronized关键字,这种方式在多线程环境下效率不高,因为对数据操作只允许一个线程进行处理。 有了HashTable为何还要有个ConcurrentHashMap? ConcurrentHashMap是为了解决在多线程环境下提升数据操作效率而设计的一个数据结构,解决了HashTable效率上的问题,提供了并发访问的可能。 ConcurrentHashMap是如何实现线程安全的呢? Hash算法有个桶的概念

JAVA UUID 生成

做~自己de王妃 提交于 2020-11-24 06:37:54
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID public class UTest { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid); } } UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。 在Java中生成UUID主要有以下几种方式: JDK1.5 如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可. UUID uuid = UUID.randomUUID(); String s = UUID.randomUUID

Maven项目不能编译jsp解决方法:Unable to compile class for JSP

孤者浪人 提交于 2020-11-24 04:58:35
一、问题描述: 先交代开发环境,JDK是1.8的,IDE是eclipse 4.7,web服务器是Tomcat 9.0,maven是3.5.0,搭建好环境后输入命令tomcat:run,然后就报org.apache.jasper.JasperException: Unable to compile class for JSP错误。 二、分析问题: (1)不能编译应该是没有导入servlet-api、jsp-api包的原因,然后就在pom文件中加上servlet-api、jsp-api包,为了防止包冲突,需要把<scope>改成provided。 1 < dependency > 2 < groupId > javax.servlet </ groupId > 3 < artifactId > servlet-api </ artifactId > 4 < version > 2.5 </ version > 5 < scope > provided </ scope > 6 </ dependency > 7 < dependency > 8 < groupId > javax.servlet </ groupId > 9 < artifactId > jsp-api </ artifactId > 10 < version > 2.0 </ version > 11 < scope

RocketMQ入门手册

我们两清 提交于 2020-11-24 03:30:11
前言 继我上一篇博客后 分布式消息队列RocketMQ学习教程① 上一篇博客最主要介绍了几种常用的MQ,所以本博客再简单介绍一下RocketMQ的原理和简单的例子,基于Java实现,希望可以帮助学习者 RoketMQ搭建Linux版 “工于利其事,必先利其器”,所以我们首先需要搭建好RocketMQ, 考虑到学习者不一定有Linux系统的服务器,所以本博客介绍一下Linux和Window系统的两种安装方法,以补充上一篇博客 因为阿里已经将RocketMQ捐给Apache了,所以现在我们需要去Apache官网下载 RocketMQ官网 注意RocketMQ是基于Java开发的,所以安装前必须安装JDK,Linux JDK安装的可以看 分布式消息队列RocketMQ学习教程① 下载文件解压后,可以看到conf文件夹里有2m-noslave、2m-2s-async、2m-2s-sync文件夹 2m-noslave 两主,无从的配置 2m-2s-async 两主,两从,同步复制数据的配置 2m-2s-sync 两主,两从,异步复制数据的配置 我们找到2m-noslave的broker-a.properties文件,修改完善配置 broker-a.properties #所属集群名字 brokerClusterName=DefaultCluster #broker名字

Java--基础阶段--1Java语言概述--1.2Java语言的环境搭建

那年仲夏 提交于 2020-11-24 03:13:15
一.明确什么是JDK,JRE 1. 什么是JDK、JRE JDK( J ava D evelopment K it Java 开发工具包) JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。 其中的开发工具:编译工具(javac.exe)打包工具(jar.exe)等 javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 jdb – debugger,查错工具 java – 运行编译后的java程序(.class后缀的) appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 Jconsole: Java进行系统调试和监控的工具 JRE( J ava R untime E nvironment,Java运行环境) 包括Java虚拟机(JVM J ava V irtual M achine)和Java程序所需的核心类库,如果想要 运行 一个开发好的java程序,计算机中只需要安装JRE即可。 2

【Android】win10操作系统下Android环境配置

半世苍凉 提交于 2020-11-24 03:01:55
Windows命令行调试unity(Android)应用环境变量配置 准备步骤: 先下载好我们需要的Android SDK和JDK。 Android SDK推荐地址:http://tools.android-studio.org/index.php/sdk -安卓中文社区 选择好对应平台的安装包或解压包下载至本地。 JDK推荐地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html -Oracle官方网站 选择好适合自己平台的版本下载至本地。 安装SDK: 推荐傻瓜式安装(next-->next-->next),安装至C盘。(当然其他盘也是可以的)。 安装JDK: 同上。 配置环境变量: 1. 首先右击“我的计算机”或“此电脑”图标,在弹出来的下拉列表中点击“属性(R)”,如下图所示。 2. 进入到“系统”属性面板,点击左侧的“高级系统设置”,如下图所示。 3. 弹出一个“系统属性”窗口,点击右下角的“环境变量(N)...”按钮,如下图所示。 4."系统变量(s)"下面“新建(W)...”按钮,在“新建系统变量”对话框中输入变量名ANDROID_HOME,设置变量值为Android SDK的安装路径,我这里为D:\Personal\android-sdk 5."系统变量(s)"下面“新建(W)...

fastjson<=1.2.62远程代码执行漏洞通告

血红的双手。 提交于 2020-11-24 02:55:00
0x00 漏洞背景 2020年02月日, 360CERT监测到友商发布了fastjson<=1.2.62远程代码执行漏洞通告。 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 此次漏洞是由于 CVE-2020-8840 的 gadget 绕过了fastjson的黑名单而导致的,当服务端存在收到漏洞影响的 xbean-reflect 依赖并且开启fastjson的 autotype 时,远程攻击者可以通过精心构造的请求包触发漏洞从而导致在服务端上造成远程命令执行的效果。 0x01 风险等级 360CERT对该漏洞进行评定 评定方式 等级 威胁等级 中危 影响面 一般 360CERT建议广大用户及时更新fastjson版本。做好资产 自查/自检/预防 工作,以免遭受攻击。 0x02 影响版本 fastjson <= 1.2.62 0x03 漏洞证明 0x04 修复建议 1.fastjson默认关闭 autotype ,请在项目源码中全文搜索以下代码,找到并将此代码删除: ParserConfig.getGlobalInstance () .setAutoTypeSupport ( true ); 2.将JDK升级到最新版本。 0x05 产品侧解决方案

fastjson<=1.2.62远程代码执行漏洞通告

强颜欢笑 提交于 2020-11-24 02:40:50
0x00 漏洞背景 2020年02月日, 360CERT监测到友商发布了fastjson<=1.2.62远程代码执行漏洞通告。 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 此次漏洞是由于 CVE-2020-8840 的 gadget 绕过了fastjson的黑名单而导致的,当服务端存在收到漏洞影响的 xbean-reflect 依赖并且开启fastjson的 autotype 时,远程攻击者可以通过精心构造的请求包触发漏洞从而导致在服务端上造成远程命令执行的效果。 0x01 风险等级 360CERT对该漏洞进行评定 评定方式 等级 威胁等级 中危 影响面 一般 360CERT建议广大用户及时更新fastjson版本。做好资产 自查/自检/预防 工作,以免遭受攻击。 0x02 影响版本 fastjson <= 1.2.62 0x03 漏洞证明 0x04 修复建议 1.fastjson默认关闭 autotype ,请在项目源码中全文搜索以下代码,找到并将此代码删除: ParserConfig.getGlobalInstance () .setAutoTypeSupport ( true ); 2.将JDK升级到最新版本。 0x05 产品侧解决方案

这 35 个 Java 代码优化细节,你用了吗?

喜你入骨 提交于 2020-11-24 02:29:09
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 优化代码的目标是: 减小代码体积 提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替

我还在生产玩 JDK7,JDK 15 却要来了!

巧了我就是萌 提交于 2020-11-24 00:03:08
自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15。 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 JDK 引入的新功能。 这几天升级了 IDEA,顺便体验了一下 JDK15 的新特性。 虽然我知道你们可能跟我一样JDK8 都还没用熟,但是无妨,看看新版本 JDK 来酸一下。 Text Blocks 最终定板 之前版本的 JDK,如果我们需要插入 HTML , XML , SQL 或 JSON 片段,非常麻烦,需要对里面符号进行各种转义。 所以我每次都会在其他编辑器将 HTML , XML 等编辑好,然后直接复制到 IDEA 中,IDEA 自动会对这些字符转义。 每次复制进去就变成上图的效果,如果上面字符再多点,阅读起来就会更难,并且难以维护。 所幸 IDEA 提供了一个 Inject Language 功能,我们可以在里面快速方便的编辑。 Java 开发者也关注到这个问题,他们在 JDK13 引入的一个新的预览特性「 Text Blocks 」,可以使用三引号将复杂的字符串赋值,从而让我们从各种转义中解脱出来,可以更加方便的编辑字符串。 这个功能在其他语言还是比较常见的,比如 Python 等。 Text Blocks 新功能在 JDK14 再次以预览功能引入,最终在 JDK15