package ip;
public class Main implements Runnable{
volatile static int a=0;
public static void main(String[] args) {
Main m=new Main();
Thread a1=new Thread(m);
Thread b2=new Thread(m);
Thread c3=new Thread(m);
a1.start();
System.out.println("尝试一下"+a);
b2.start();
System.out.println("尝试一下"+a);
c3.start();
System.out.println("尝试一下"+a);
}
@Override
synchronized public void run() {
// TODO Auto-generated method stub
String name=Thread.currentThread().getName();
for(int i=0;i<100;i++) {
a++;
System.out.println(name+" "+a);
}
}
}
做一个多线程的demo的时候,发现synchronized关键字。
我在run方法加了synchronized,然后里面用了变量a
这种情况下,我认为主函数会等把a1线程执行完后再执行后面一条的println语句,因为a变量应该是被锁上了的
结果,在执行run的时候,
所以说,这个锁只是针对run方法的锁,而不影响其他地方对变量a的更改,为了验证,我继续在main函数里面更改a变量
可以看到,a在外面被改动了之后,线程里面的也直接从1跳到了10。