当前位置: 首页 > news >正文

qq安全中心信任网站网站首页上的动画是咋做的

qq安全中心信任网站,网站首页上的动画是咋做的,开发手机网站,网站建设及维护协议我经常阅读有关“如果对象是不可变的#xff0c;则它是线程安全的”的文章。 实际上#xff0c;我从未找到过一篇让我相信不变的意味着线程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一书中关于不变性的一本书也没有完全令我满意。 在这本书中#xff0… 我经常阅读有关“如果对象是不可变的则它是线程安全的”的文章。 实际上我从未找到过一篇让我相信不变的意味着线程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一书中关于不变性的一本书也没有完全令我满意。 在这本书中我们可以在一个框架中逐字阅读 不可变对象始终是线程安全的 。 我认为这句话值得更多解释。 因此我将尝试定义不变性及其与线程安全性的关系。 定义 不变性 我的定义是“不可变的对象是在构造之后状态不会改变的对象”。 我故意含糊其词因为没有人真正同意确切的定义。 线程安全 您可以在Internet上找到许多不同的“线程安全”定义。 定义它实际上非常棘手。 我会说线程安全代码是在多线程环境中具有预期行为的代码。 我让您定义“预期行为”… 字符串示例 让我们看一下String的代码实际上只是一部分代码…… public class String {private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0public String(char[] value) {this.value Arrays.copyOf(value, value.length);}public int hashCode() {int h hash;if (h 0 value.length 0) {char val[] value;for (int i 0; i value.length; i) {h 31 * h val[i];}hash h;}return h;} } String被认为是不可变的。 看一下它的实现我们可以推断出一件事不可变的对象可以更改其内部状态在这种情况下是延迟加载的哈希码只要它在外部不可见即可。 现在我将以一种非线程安全的方式重写hashcode方法 public int hashCode() {if (hash 0 value.length 0) {char val[] value;for (int i 0; i value.length; i) {hash 31 * hash val[i];}}return hash;} 如您所见我删除了局部变量h并直接影响了变量hash 。 此实现不是线程安全的 如果多个线程同时调用hashcode 则每个线程的返回值可能不同。 问题是这堂课是一成不变的吗 由于两个不同的线程可以看到不同的哈希码因此从外部角度来看我们具有状态更改因此它不是不可变的。 我们可以得出这样的结论 String是不可变的 因为它是线程安全的而不是相反的。 所以……说“做一些不可变的对象它是线程安全的”有什么意义 但是请注意您必须使不可变对象具有线程安全性” ImmutableSimpleDateFormat示例 在下面我写了一个类似于SimpleDateFormat的类。 public class VerySimpleDateFormat {private final DateFormat formatter SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT);public String format(Date d){return formatter.format(d);} } 该代码不是线程安全的因为SimpleDateFormat.format不是。 这个对象是不变的吗 好问题 我们已尽力使所有字段均不可修改我们不使用任何设置方法或任何建议对象状态将改变的方法。 实际上内部SimpleDateFormat更改其状态这就是它不安全线程的原因。 由于对象图中的某些内容发生了变化因此即使它看起来像它也不是不变的。问题甚至不是SimpleDateFormat更改其内部状态而是它以一种非线程安全的方式进行操作。 总结这个例子创建一个不可变的类并不容易。 最后一个关键字还不够您必须确保对象的对象字段不会更改其状态这有时是不可能的。 不可变的对象可以具有非线程安全的方法没有魔术 让我们看一下下面的代码。 public class HelloAppender {private final String greeting;public HelloAppender(String name) {this.greeting hello name !\n;}public void appendTo(Appendable app) throws IOException {app.append(greeting);} } HelloAppender类绝对是不可变的。 方法appendTo接受Appendable 。 由于Appendable不能保证是线程安全的例如StringBuilder 因此追加到此Appendable会在多线程环境中引起问题。 结论 在某些情况下创建不可变对象绝对是一个好习惯并且对创建线程安全代码有很大帮助。 但是当我到处阅读时这使我感到困扰。 不可变对象是线程安全的 显示为公理。 我明白了这一点但是我认为对此进行一点思考总是很有益的以便理解导致非线程安全代码的原因。 感谢Jose的评论在本文的结尾我得出了不同的结论。 这都是关于不可变的定义。 需要澄清 如果满足以下条件则对象是不可变的 它的所有字段在使用之前都已初始化这意味着您可以进行延迟初始化 字段的状态在初始化后不会更改不更改表示对象图不会更改即使子级的内部状态也是如此 除非对象必须处理非线程安全的对象否则不可变对象将始终是线程安全的。 参考 不变性真的意味着线程安全吗 从我们的JCG合作伙伴 Tibo Delor在InvalidCodeException博客中获得。 翻译自: https://www.javacodegeeks.com/2012/09/does-immutability-really-means-thread.html
http://www.zqtcl.cn/news/286333/

相关文章:

  • 做网站建设公司哪家好安徽省住房建设部官方网站
  • 网站被黑咋样的柳州正规网站制作公司哪家好
  • 莱芜网站开发代理四川网络推广服务
  • 应该知道的网站网站全网建设莱芜
  • 北京网站页设计制作广州专业网站改版
  • 重庆网站建设建站收费免费外链网盘
  • 做加盟代理的网站比较好的网页网站设计
  • 兴义网站开发企业标准备案平台官网
  • 蓝彩网络科技_齐齐哈尔微信营销_齐齐哈尔网站建设会员卡管理系统哪里买
  • 织梦门户网站做大后建个人免费网站用哪个
  • 深圳市建设管理中心西安官网seo
  • 网站开发工作方案自己做的网站怎么维护
  • 潍坊建设部门管理网站做网站如何接单
  • 定制高端网站建设设计建立的近义词
  • 企业网站建设进度邢台163官网
  • 17做网店网站池尾替代wordpress 搜索
  • 网站建设资料 优帮云商品分类标准
  • 鄂尔多斯 网站建设俐侎族网站建设背景
  • 佛山专业网站建设公司上海公司官网
  • 那里做网站好网站模板 登陆
  • 网站的服务器打不开wordpress 修改默认路径
  • 外贸网站做几种产品合肥网络公司哪个最好
  • 长乐区建设局网站一般通过什么渠道了解防灾减灾知识
  • 泰安商城网站开发设计什么网站备案比较快
  • 织梦网站修改首页图片网站名称去哪里注册
  • 电脑版 做网站尺寸怎么查找网站后台
  • 南京网站建设公司国际新闻头条最新消息
  • 类似于wordpress的网站吗做网站前端难吗
  • 做外贸网站维护费是多少小程序源码提取
  • 设计网站作品欣赏有那些网站注册商标官网入口