线程共享实例变量

约翰·布莱克

我希望两个线程共享该变量,但有时在运行时它会打印两次两次,而不是1和2。

public class man implements Runnable{

    int value = 0;

    public static void main(String[] args){
        Runnable job = new man();
        Thread work1 = new Thread(job);
        work1.setName("Thread1");
        Thread work2 = new Thread(job);
        work2.setName("Thread2");

        work1.start();
        work2.start();
    }


    public void run(){
        synchronized(this){
            value = value + 1;
        }
        System.out.println("VALUE = " + value +", Running " + Thread.currentThread().getName());
    }



}

输出有时是:

VALUE = 2, Running Thread2
VALUE = 2, Running Thread1

其他时间是:

VALUE = 1, Running Thread2
VALUE = 2, Running Thread1

为什么会这样呢?我在一本HeadFirst书中学习Java,然后出现了这个问题。

里德·科普西(Reed Copsey)

您没有在System.out.println调用中同步访问,因此“第二”线程有时会在“第一个线程”打印之前递增。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多线程共享变量

来自分类Dev

实例间共享变量

来自分类Dev

线程之间不共享静态实例

来自分类Dev

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

来自分类Dev

在 Python 中,线程之间共享类实例数据和方法,但只有一个特定变量

来自分类Dev

在Tensorflow中的线程之间共享变量

来自分类Dev

Python多线程共享变量导致UnboundLocalError

来自分类Dev

在线程之间共享变量的方法

来自分类Dev

是否直接访问线程共享变量?

来自分类Dev

两线程共享静态变量

来自分类Dev

在JAVA中的线程之间共享变量

来自分类Dev

C-共享本地线程变量

来自分类Dev

从所有线程更新共享变量

来自分类Dev

python递归实例变量共享数据

来自分类Dev

Dojo:小部件实例共享相同的变量

来自分类Dev

Python实例变量显然共享数据

来自分类Dev

具有全局变量的共享实例

来自分类Dev

实例变量不在方法之间共享

来自分类Dev

在新对象实例之间共享变量

来自分类Dev

python递归实例变量共享数据

来自分类Dev

Python实例变量显然共享数据

来自分类Dev

具有全局变量的共享实例

来自分类Dev

类实例之间的 Tensorflow 变量共享

来自分类Dev

在主线程和线程之间共享变量

来自分类Dev

整数实例变量上的线程同步

来自分类Dev

Ruby MRI中的线程安全实例变量

来自分类Dev

在多个线程之间共享流实例是否安全?

来自分类Dev

在Rust中的线程之间共享可变变量

来自分类Dev

C#.Net 4.5多线程共享变量