Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法理解同步_Java_Multithreading_Synchronization - Fatal编程技术网

Java 无法理解同步

Java 无法理解同步,java,multithreading,synchronization,Java,Multithreading,Synchronization,嘿,我正在尝试以同步的方式创建10个线程,我提出了下面的代码,但是我无法理解下面提到的部分代码。我对java还是个新手,我试着从 但我还是不明白 class question3 { public static void main(String arg[]) throws Exception { for (int i = 0; i < 11; i++) { data di = new data(); System.out

嘿,我正在尝试以同步的方式创建10个线程,我提出了下面的代码,但是我无法理解下面提到的部分代码。我对java还是个新手,我试着从 但我还是不明白

class question3 {
    public static void main(String arg[]) throws Exception {
        for (int i = 0; i < 11; i++) {
            data di = new data();
            System.out.println(di.count);

        }
    }
}

class item {
    static int count = 0;
}

class data extends item implements Runnable {
    item d = this;
    Thread t;

    data() {
        t = new Thread(this);
        t.start();
    }

    public void run() {
        d = syn.increment(d);
    }
}

class syn {
    synchronized static item increment(item i) {
        i.count++;
        return (i);
    }

}

启动线程时使用
run
函数,这是在实现
Runnable
时必须覆盖的函数。调用
Thread.start()
时,将调用
run
函数

类syn
包含一个synchronized方法,它只是意味着每次只有一个线程可以访问它,从而使
increment
函数线程安全

对象
d
有一个静态变量
count
,这意味着
类(和
数据
)的所有实例共享相同的
计数
,因此所有线程增加相同的变量


线
d=同步增量(d)基本上是
count++
,但以线程安全的方式

请修复您的代码缩进。“我想出了代码”-“我不确定这部分代码的作用”-您的意思是“我复制了代码”,对吗?最好问问作者它是做什么的。信息的另一个好地方是网络。但老实说,若您是java新手,那个么从。代码中有一句话:类名应该总是以大写字母开头。@Turing85我知道发生了什么,但我不明白为什么要传递对象d以及di.count是如何工作的?这与同步无关
di.count
访问实例
di
的字段
count
(属于
data
类型,从
项继承)。正如我之前所说:从基础开始。这不是我要问的。我试图理解为什么需要
d=syn.increment(d)
,我理解发生了什么,但我不明白的是为什么要传递对象d以及di.count如何工作?
public void run() {
        d = syn.increment(d);
    }
}

class syn {
    synchronized static item increment(item i) {
        i.count++;
        return (i);
    }
}