package com.example.demo;
class Test {
private int data;
int result = 0;
public void m() {
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread {
private Test mv;
public ThreadExample(Test mv)
{
this.mv = mv;
}
public void run() {
synchronized(mv) {
mv.m();
}
}
}
class ThreadTest {
public static void main(String args[]) {
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
t1,t2,t3线程使用同一个对象mv,
synchronized(mv) 对象锁(实例锁)
当多个并发线程访问同步synchronized(this)同步代码块时, 某一时刻仅能有一个线程能执行同步,其他线程必须等待。也就是说虽然不能确认t1、t2、t3哪一个线程先执行,但它确实是排队执行的,不会出现变量的覆盖。所以输出结果为分别为2 2、4 4、6 6。