Java 为什么下面的多线程代码不起作用?我相信答案应该是20000
当增量方法同步时,为什么我得不到20000。我对runnable做了同样的事情,它成功了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()
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()
静态以使写入安全的方式进行实际同步