一个类实现了Runnable接口,在run方法前面加synchronized和在run方法的一个方法加synchronized有什么区别?
问题如下:
第一种:
(run为重写方法)
class A{
public synchronized void run(){
m();
}
public void m(){
}
}
第二种:
(run为重写方法)
class A{
public void run(){
m();
}
public synchronized void m(){
}
}
在main方法中,创建两个A类对象,分别加到两个Thread中运行线程
为什么第一种方法都是一个线程在执行?(为什么线程一能一直拿到锁?)
而第二种是两个线程同时进行
因为调用run方法的时候是启动一个新的线程去启动这个run方法
但是用synchronized 修饰run方法后 只会有一个线程能执行run方法
但是修饰里面的方法的话 还是启动了两个线程 只是两个线程在执行m()方法的时候也竞争锁
如果你是new了2个 A对象,并且M方法是实例方法是不会出现你说的问题的