synchronized与volatile
public class T{
/*volatile*/ int count = 0;
//加上synchronized之后结果为100000
synchronized void m(){
for(int i=0; i<10000;i++) count ++;
}
public static void main(String[] args){
T t = new T();
List<Thread> threads = new ArrayList<~>();
for(int i=0;i<10; i++){
threads.add(new Thread(t::m,"thread-"+i));
}
threads.forEach((o)->o.start());
threads.forEach((o)->{
try{
o.join();
}catch(InterruptedException e){
e.printStackTrace();
}
});
}
synchronized锁粒度优化
public class FineCoarseLock{
int count = 0;
void m1(){
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
count ++;
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
}
void m2(){
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized(this){
count ++;
}
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}