Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 - Fatal编程技术网

Java 无法理解输出

Java 无法理解输出,java,multithreading,Java,Multithreading,根据我的理解,如果我使用了同步关键字,那么只有一个线程可以进入,一旦它离开,那么只有另一个线程可以进入 第二个2 您正在创建两个独立的Test实例,您的incrementCount方法是一个实例方法,尽管它增加了一个静态变量 您的每个线程都在不同的Test实例上运行,因此它们不会相互阻塞,您将运行到正常的争用条件中 如果将incrementCount设置为静态方法,则两个线程都将尝试获取Test.class的监视器,并且它应该在这些条件下工作。(虽然不能保证main线程将读取count的最新写入

根据我的理解,如果我使用了同步关键字,那么只有一个线程可以进入,一旦它离开,那么只有另一个线程可以进入 第二个2


您正在创建两个独立的
Test
实例,您的
incrementCount
方法是一个实例方法,尽管它增加了一个静态变量

您的每个线程都在不同的
Test
实例上运行,因此它们不会相互阻塞,您将运行到正常的争用条件中

如果将
incrementCount
设置为静态方法,则两个线程都将尝试获取
Test.class
的监视器,并且它应该在这些条件下工作。(虽然不能保证
main
线程将读取
count
的最新写入值)


或者,创建一个
Test
实例,并将其传递给两个
线程
构造函数,此时他们都将尝试获取同一个
Test
实例的监视器。关键的一点是,如果两个线程正在获取不同的监视器,那么它们都可以在不等待另一个的情况下完成这项任务。

您正在创建两个独立的
Test
实例,并且您的
incrementCount
方法是一个实例方法,尽管它增加了一个静态变量

您的每个线程都在不同的
Test
实例上运行,因此它们不会相互阻塞,您将运行到正常的争用条件中

如果将
incrementCount
设置为静态方法,则两个线程都将尝试获取
Test.class
的监视器,并且它应该在这些条件下工作。(虽然不能保证
main
线程将读取
count
的最新写入值)

或者,创建一个
Test
实例,并将其传递给两个
线程
构造函数,此时他们都将尝试获取同一个
Test
实例的监视器。关键的一点是,如果两个线程正在获取不同的监视器,那么它们都可以在不等待另一个线程的情况下完成此操作

package com.vikash.GeeksForGeeks;

public class Test implements Runnable{

    private  static  int count;

    public  synchronized  void  incrementCount()
    {
        count++;
        System.out.println(Thread.currentThread().getName()+" "+count);
    }
    public static void main(String[] args) throws InterruptedException {

        Thread t1=new Thread(new Test());
        Thread t2=new Thread(new Test());
        t1.start();t1.setName("First");
        t2.start();t2.setName("Second");
        t1.join();
        t2.join();
        System.out.println("Count Value="+count);

    }
    @Override
    public void run() {
        incrementCount();
    }
}