Java 为什么下面的多线程代码不起作用?我相信答案应该是20000

Java 为什么下面的多线程代码不起作用?我相信答案应该是20000,java,multithreading,synchronization,Java,Multithreading,Synchronization,当增量方法同步时,为什么我得不到20000。我对runnable做了同样的事情,它成功了 public class ThreadClass extends Thread { static int count=0; public synchronized void increment() { count++; } public void run()

当增量方法同步时,为什么我得不到20000。我对runnable做了同样的事情,它成功了

   public class ThreadClass extends Thread
    {
            static int count=0;
            public synchronized void increment()
            {
                count++;
            }

    public void run()
    {
        for(int i=0;i<10000;i++)
        {
            increment();
        }
    }; 

}

public class Main {

    public static void main(String[] args) {

        ThreadClass t1=new ThreadClass();
        ThreadClass t2= new ThreadClass();

        t1.start();
        t2.start();

        try {
            t2.join();
            t1.join();
            } 
        catch (Exception e) 
            {
            e.printStackTrace();
            }
        System.out.println(ThreadClass.count);
    }

}
public类ThreadClass扩展线程
{
静态整数计数=0;
公共同步的无效增量()
{
计数++;
}
公开募捐
{

对于(int i=0;iJLS,对于
synchronized
方法,如下所示:

对于实例方法,将使用与之关联的监视器(调用该方法的对象)

因此,两个
ThreadClass
实例将独立锁定,并且不会有公共锁保护对
count
的错误写入

Threadclass.class
上显式同步或使
increment()
静态以使写入安全的方式进行实际同步