Java Volatile和synchronized之间的区别
我已经执行了下面的一段代码,希望得到20000的计数。我已经声明count为volatile,但是输出并不总是正确的Java Volatile和synchronized之间的区别,java,multithreading,synchronization,volatile,Java,Multithreading,Synchronization,Volatile,我已经执行了下面的一段代码,希望得到20000的计数。我已经声明count为volatile,但是输出并不总是正确的 package threading; public class Demo5 { private volatile int count =0; public static void main(String[] args){ Demo5 d = new Demo5(); d.doWork(); } public vo
package threading;
public class Demo5 {
private volatile int count =0;
public static void main(String[] args){
Demo5 d = new Demo5();
d.doWork();
}
public void doWork(){
Thread t1 = new Thread(new Runnable() {
public void run() {
for(int i=0; i<10000; i++){
count++;
}
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
for(int i=0; i<10000; i++){
count++;
}
}
});
t1.start();
t2.start();
try{
t1.join();
t2.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(count+" is count");
}
}
有人能告诉我什么时候应该使用volatile,什么时候应该使用synchronized吗 使用synchronized,您在同一关键部分中包括增量和集合操作。使用volatile时,增量和集合分别受到保护。这意味着一个线程可以递增,然后是另一个线程,然后一个线程可以设置另一个线程,不一定按照它们递增的顺序。volatile只能协调单个动作;同步可以协调动作序列. 方法计数是做什么的?这就是打字错误。更正。
public synchronized void increment(){
count++;
}