/*
* 线程同步锁定了对象,只能保证同一时间内只有一个线程访问那个方法,
* 不能阻止别的线程访问别的方法,要对所有访问这个资源的方法都上锁
*/
public class TT implements Runnable{
int a = 100;
public synchronized void m1() { //锁定了本对象
a = 1000;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("a = " + a);
}
/*
public void m2() { //别的线程还可以访问到这个方法,改掉共享资源a的值
a = 2000;
System.out.println(a);
}
*/
public synchronized void m2() { //给本方法也上锁,避免资源被乱访问
a = 2000;
System.out.println(a);
}
public static void main(String[] args) {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tt.m2();
}
@Override
public void run() {
m1();
}
}
java线程同步时,不同线程通过不同方法,访问同一资源
最新推荐文章于 2022-11-09 14:00:00 发布