为什么类结构语言中的构造函数通常被视为线程安全?

 左边我们画圈圈 发布于 2023-02-07 11:16

(我希望我可以为实现线程的所有类构造语言标记这个问题,但是这里有Java,C++,C#和Ruby.不是我对所有这些都很酷)

我想我已经在博客文章/教程上看到过这种效果的陈述(类构造函数是线程安全的).我无法追踪任何直接的陈述,但许多帖子和教程都做出了假设,或者甚至没有提到在构造函数和析构函数上运行的线程问题.坚持Java,它有一个历史和一些正式的多线程方法,

Javamex

扬科夫的教程

Oracle教程

所有这些文章/网页都以自信的方式编写,并包含全面的讨论.他们都提到了方法同步的Java特性,所以你希望他们可能会提到这会如何影响构造和破坏的特殊方法.但他们没有.

但类构造函数和析构函数需要像任何类方法一样考虑.这是一篇关于Java的文章,

Java中的安全构造技术

关于从构造函数泄漏'this'引用.这里有几个StackOverflow帖子,

Java中不完整构造的对象,

Java构造函数需要锁定

显示具有线程问题的构造函数.我怀疑特殊方法中的线程问题仅限于Java.

所以,我想知道,

是否基于构造函数的总体布局假设了线程安全(无论如何定义)?一个代码不多的紧密编码的构造函数将接近可重入代码(通过参数接受数据等)

或者口译员/编制者是否处理具有特殊待遇或保护的施工人员/破坏者?例如,Java内存模型在构造结束时对期望做出一些评论,我希望其他语言规范也是如此.

维基百科关于构造函数的内容很少.在不同的上下文中,这篇文章中的构造语言中的构造函数包含一些提示,但不是关于线程安全性.

虽然在专业书籍中有许多信息,但是对StackOverflow进行一般性(尽管语言特定的提及很有趣!)解释/讨论会很好.

1 个回答
  • 通常,不指向共享数据的局部变量是线程安全的.由于您通常只在一个线程中创建一个对象,因此它实际上是一个线程本地数据结构,因此线程安全(大多数情况下).

    在Java中,您可以通过多种方式打破这种假设

    在构造函数中启动一个新线程

    设置对另一个线程可见的对象的引用.

    使用非最终字段并将对象添加到线程不安全容器或共享数据结构.

    通常这些操作都被认为是不好的做法,所以如果你避免使用这些操作,你就有了一个线程安全的构造函数,而不需要锁定.

    2023-02-07 11:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有