synchronized (this) 与synchronized(User.class)的区别
this表示当前对象,输出结果是张三,李四。两个一起等待一起输出。
User.class是一个一个的输出,张三,在输入李四。
public class ThreadDemo {
public static void main(String[] args) {
User user1 = new User("张三");
User user2 = new User("李四");
MyThread myThread1 = new MyThread(user1);
MyThread myThread2 = new MyThread(user2);
for(int i =0;i<10;i++){
new Thread(myThread1).start();
new Thread(myThread2).start();
}
}
}
class User {
public String name;
public User(String name){
this.name = name;
}
public void add() throws InterruptedException {
synchronized (User.class){ // this和User.class的区别?
Thread.sleep(1000);
System.out.println("name:"+name+",threadNmae:"+Thread.currentThread().getName()+"---> add");
Thread.sleep(1000);
}
}
}
class MyThread implements Runnable{
private User user;
public MyThread(User user){
this.user = user;
}
@Override
public void run() {
try {
user.add();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}