仅具有局部变量的实例方法的线程安全

新郎

通常,同时调用使用局部变量的实例方法是否仅与线程安全有关?

这是一个简短的例子。将调用多个线程a();

public class A {
    public boolean a(File file) throws Exception {
        boolean t = true;
        FileInputStream fin = null;
        BufferedInputStream bin = null;
        try {
            fin = new FileInputStream(file);
            bin = new BufferedInputStream(fin);
            while(bin.read() > 0) {}
            return t; 
        finally {
            try {
                if (in != null) in.close();
            } catch (IOException e) {}
            try {
                if (fin != null) fin.close();
            } catch (IOException e) {}
        }
    }
}
布拉吉

当您调用方法时,局部变量驻留在单个调用的堆栈中,因此在多线程的情况下您也不必担心局部变量,但是如果将相同的File变量作为参数传递,则可能会产生问题

阅读为什么局部变量在Java中是线程安全的

创建线程时,它将创建自己的堆栈。两个线程将具有两个堆栈,并且一个线程永远不会与其他线程共享其堆栈。

在此处输入图片说明

局部变量始终是线程安全的。但是请记住,局部变量指向的对象可能并非如此。如果对象是在方法内部实例化的,并且从未转义,则不会有问题。

另一方面,指向某些共享库的局部变量可能仍然会引起问题。仅仅因为您将共享对象分配给本地引用,并不意味着该对象自动成为线程安全的。


请参阅JavaRanch-线程安全和局部变量。

如果局部变量是原始变量,则可以,它是线程安全的。如果局部变量是指向本地创建对象的引用,则可以,它应该是线程安全的(假定静态变量是线程安全的)。

如果局部变量是指向外部创建对象的引用,则且仅当可以以线程方式安全使用该对象时,该变量才是线程安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有局部变量的全局方法线程安全

来自分类Java

静态方法和线程安全中的局部变量

来自分类Dev

局部变量是线程安全的吗?

来自分类Dev

Kotlin局部变量线程安全

来自分类Dev

静态局部变量的线程安全增量

来自分类Dev

线程安全局部变量

来自分类Dev

Java局部变量线程安全

来自分类Java

Java实例变量在局部变量内引用。内存,线程安全性和完成

来自分类Dev

Ruby 中的线程局部实例局部变量

来自分类Java

是局部变量方法的线程共享?

来自分类Dev

java框架源代码具有将实例变量分配给局部变量的模式

来自分类Java

局部变量和实例变量具有相同的名称

来自分类Java

为什么局部变量在Java中是线程安全的

来自分类Dev

具有局部方法作用域的实例变量

来自分类Java

Java中是否有线程组局部变量?

来自分类Linux

在Linux上线程局部变量的访问速度有多快

来自分类Java

实例方法和实例变量的线程安全

来自分类Dev

Ruby局部变量的行为遮盖了实例方法

来自分类Dev

在Ruby中具有相同名称的局部变量和方法?

来自分类Dev

具有局部变量的递归函数未执行if语句

来自分类Dev

我的应用程序具有局部变量eror

来自分类Dev

使用线程安全针对局部变量和全局变量进行Java垃圾收集

来自分类Java

实例变量可以有效地最终确定吗/ Java中仅局部变量有效地最终确定吗?

来自分类Dev

局部变量与方法访问

来自分类Dev

在匿名线程的上下文中访问局部变量是否安全?

来自分类Dev

C#并行循环局部变量线程安全信息

来自分类Dev

C ++:是否使用IIFE线程安全初始化静态局部变量?

来自分类Linux

线程局部变量和fs段

来自分类Dev

在OpenMP中重置线程局部变量

Related 相关文章

热门标签

归档