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();
}
}
}
本文探讨了Java中`synchronized`关键字在并发控制中的应用,以及`volatile`的作用。通过实例分析了不同场景下使用`synchronized`的粒度优化,强调了在多线程环境下的线程安全问题。

被折叠的 条评论
为什么被折叠?



