java线程死亡_Java模因拒绝死亡

java线程死亡

也有标题; 我的宠物讨厌Java编码。

有许多Java模因让我很烦,部分是因为它们总是一个坏主意,但主要是因为人们在找到更好的替代方案后的几年里仍在不断地选择它们。

使用StringBuffer代替StringBuilder

从2004年开始,用于StringBuffer的Javadoc

从JDK 5版本开始,该类已经添加了一个等效类,该类旨在供单线程StringBuilder使用。 通常应优先使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步,因此它比所有此类都优先使用。

StringBuilder不仅是一个更好的选择,而且本来可以使用同步StringBuffer的情况如此罕见,这与以往是个好主意。

说你有代码

// run in two threads
sb.append(key).append("=").append(value).append(", ");

每个附录都是线程安全的,但是可以随时释放该锁,这意味着您可以

key1=value1, key2=value2, 
key1=key2value1=, value2, 
key1key2==value1value2, ,

更糟糕的是,为了提高效率,JIT和JVM将试图在两次调用之间保持锁定。 这意味着您可以拥有可以通过所有测试并可以在生产环境中使用多年的代码,但是很少中断,这可能是由于升级JVM所致。

使用DataInputStream读取文本

另一个常见的模因是,在阅读以下模板中的文本时使用DataInputStream(三行,两个阅读器位于同一行),我怀疑有一个原始代码被复制了。

FileInputStream fstream = new FileInputStream("filename.txt");  
DataInputStream in = new DataInputStream(fstream);  
BufferedReader br = new BufferedReader(new InputStreamReader(in));

这很不好,原因有三个

  • 由于BufferedReader的缓冲性质,您可能会倾向于使用in来读取无法使用的二进制文件。 (我已经看到了这个尝试)
  • 同样,您可能会相信DataInputStream在不这样做的情况下会在此处做有用的事情
  • 有一种更短的方法是正确的。
BufferedReader br = new BufferedReader(new FileReader("filename.txt")); 
// or with Java 7.
try (BufferedReader br = new BufferedReader(new FileReader("filename.txt")) {// use br
}

使用双重检查锁定创建单例

首次使用双重检查锁定时,这是一个坏主意,因为JVM不安全地支持此操作。

// Singleton with double-checked locking:
public class Singleton {private volatile static Singleton instance;private Singleton() { }public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

问题在于,直到Java 5.0为止,这种方法通常都有效,但在内存模型中无法保证。 有一个更简单的选项是安全的,不需要显式锁定。

// suggested by Bill Pugh
public class Singleton {// Private constructor prevents instantiation from other classesprivate Singleton() { }/*** SingletonHolder is loaded on the first execution of Singleton.getInstance()* or the first access to SingletonHolder.INSTANCE, not before.*/private static class SingletonHolder {public static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

这仍然很冗长,但是可以正常工作,并且不需要显式锁定,因此可以更快。

在Java 5.0中,当他们修复内存模型以安全地处理双重锁定时,他们还引入了枚举,从而为您提供了更为简单的解决方案。

约书亚·布洛赫(Joshua Bloch)在他的第二本书《有效的Java》中声称“单元素枚举类型是实现单例的最佳方法”

使用枚举,代码看起来像这样。

public enum Singleton {INSTANCE;
}

这是延迟加载的,线程安全的,没有显式锁且更简单。

参考: Java模因拒绝在Vanilla Java博客上死于我们的JCG合作伙伴 Peter Lawrey。


翻译自: https://www.javacodegeeks.com/2012/08/java-memes-which-refuse-to-die.html

java线程死亡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse报错 due to restriction on required library C:/Java/jdk1.6.0_10/jre/lib/rt.jar 解决方案

Eclipse报错 due to restriction on required library C:/Java/jdk1.6.0_10/jre/lib/rt.jar 解决方案Eclipse 编译时报错: Access restriction:The type NEW is not accessible due to restriction on required library C:/Java/jdk1.6.0_10/jre/lib/rt.jar 解决…

Matlab找到不知道的函数名

如果你知道和你要找到类似的函数的函数名,可以在help中查看你知道的函数名,然后再最下面会列出几个类似的函数,也许这里就有你要找的函数

asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)

asp.net core 2.0使用JWT认证园子里已经有挺多帖子了,但开发中发现认证未授权情况下返回的401状态码是没有任何信息的,业务中可能有需要返回一串错误的Json信息。在这里我分享一个自定义错误页面内容信息的方法,使用该扩展方法还可以捕获异常…

关于ANTLR的通用库的需求:使用反射来构建元模型

我是一名语言工程师:我使用多种工具来定义和处理语言。 在其他工具中,我使用ANTLR:它简单,灵活,可以围绕它进行构建。 但是,我发现自己围绕ANTLR为不同的项目重建了类似的工具。 我看到两个问题&#xff1…

创建和应用Java包文件的两种方式(转)

创建和应用Java包文件的两种方式(转) 《Java编程艺术》章节选登。作者:高永强 清华大学出版社 (即将出版) 12.1 包——package 。。。 12.1.1 包命名规范 为了确保包文件名称的唯一性,Java对应用软件开发者&#xff0c…

MATLAB double、str、cell间的类型转换

注:转换的前提是数组的格式符合目标数组的要求,能够转换。不然会失败str2numstr2doublesrt2matstrvcatstrcatcellstr字符数组转为元胞数组(没有strcell)int2str整数转换为字符串数组,非整数将四舍五入num2str非整数数组…

【动态规划】数字三角形2

【题目描述】 数字三角形要求走到最后mod 100最大 【输入格式】 第1行n&#xff0c;表示n行 <25第2到n1行为每个的权值 【输出格式】 mod 100最大值 【分析】 设置状态f[i][j][k]表示(i,j)各自内是否mod 100可以为k。 状态转移方程&#xff1a; f[i][j][k]f[i1][j][ka[i1][j…

面向 NLP 任务的大模型 Prompt 设计

很久之前&#xff0c;我们介绍到&#xff0c;prompt是影响下游任务的关键所在&#xff0c;当我们在应用chatgpt进行nlp任务落地时&#xff0c;如何选择合适的prompt&#xff0c;对于SFT以及推理环节尤为重要。 不过&#xff0c;硬想不是办法&#xff0c;我们可以充分参考开源的…

MATLAB安装第三方工具箱

1.1 如果是Matlab安装光盘上的工具箱&#xff0c;重新执行安装程序&#xff0c;选中即可&#xff1b;1.2 如果是单独下载的工具箱&#xff0c;一般情况下仅需要把新的工具箱解压到某个目录。2 在matlab的file下面的set path把它加上&#xff0c;或者用genpath(yourlocation/you…

Debug method

#define DEBUG(format,...) printf("Ray.he file:"__FILE__" func:%s() line:%d, print "format"", __func__, __LINE__, ##__VA_ARGS__)转载于:https://www.cnblogs.com/debruyne/p/9254619.html

soa学习路线_Web服务安全性和SOA路线图的人为维度

soa学习路线在大多数非平凡的SOA环境中&#xff0c;很难跟踪系统之间不断发展的集成&#xff0c;除非有明确的发布和查找适当信息的方法。 概述IT环境&#xff0c;定义当前或将要连接的内容&#xff0c;是维护环境的先决条件。 缺少这种方法通常会导致“面向意大利面条的环境”…

MATLAB函数参数个数控制

if nargin < 1 else if nargin < 2 else if nargin < 4 end

生产Java应用程序中的十大异常类型-基于1B事件

Pareto记录原理&#xff1a;97&#xff05;的记录错误语句是由3&#xff05;的唯一错误引起的 在最新的数据整理帖子之后&#xff0c;我们收到了很多反馈和问题&#xff0c;在该文章中&#xff0c;我们显示97&#xff05;的记录错误是由10个唯一错误引起的 。 根据普遍的需求&…

Matlab矩阵查找

find(x&#xff09;find(Aa)find(A>a)find(A>a,n);A为目标矩阵&#xff0c;a为要查找的数&#xff0c;n为查找的个数&#xff0c;返回位置

剑指Offer 斐波那契数列

时间限制&#xff1a;1秒 空间限制&#xff1a;32768K 热度指数&#xff1a;332130算法知识视频讲解 题目描述 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项。 n<39 给出代码&#xff1a; class Solution { public:int…

Matlab将一矩阵中等于某个值的元素全部替换成另一个值

A(Ax)X; %将A中等于x的值全部替换为XA(isnan(A))X;%将A中等于nan的值全部替换为X

教你制作QQ空间超高连通率背景音乐链接。

1.进入【搜搜音乐】http://music.soso.com/index.html 搜索你想要的歌曲名字。。。如下图&#xff1a; 2、 3.此链接地址并不能做背景链接&#xff0c;因为腾讯加密了&#xff0c;你只需将链接地址里的qq改成%71%71就可以作为背景音乐链接了。如图&#xff1a;

linux中查找文件属于那个软件包的方法

一、linux中查找文件属于那个软件包的方法 [rootsalt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/man1/htpasswd.1.gz [rootsalt prod]# rpm -qf /usr/bin/htpasswdhttpd-tools-2.4.6-80.el7.centos.x86_64转载于:https://www.cnblogs.com/nulige/p/9…

java io顺序_Java顺序IO性能

java io顺序许多应用程序将一系列事件记录到基于文件的存储中&#xff0c;以供以后使用。 从日志记录和审核&#xff0c;直到在事件源设计或其紧密相关的CQRS中保留事务重做日志&#xff0c;这都可以是任何东西。 Java具有多种方法&#xff0c;可以通过这些方法将文件顺序写入或…

Matlab矩阵的拼接

oneyeardata.fert [(0:14),zeros(15,3);oneyeardata.fert;(50:90),zeros(41,3)];%把0补齐