package yi.test01;
/**
* @author yangwl
*
*
* synchronized作用于静态方法和非静态方法的区别:
* 非静态方法:
* 给对象加锁(可以理解为给这个对象的内存上锁,注意 只是这块内存,其他同类对象都会有各自的内存锁),这时候
* 在其他一个以上线程中执行该对象的这个同步方法(注意:是该对象)就会产生互斥
* 静态方法:
* 相当于在类上加锁(*.class 位于代码区,静态方法位于静态区域,这个类产生的对象公用这个静态方法,所以这块
* 内存,N个对象来竞争), 这时候,只要是这个类产生的对象,在调用这个静态方法时都会产生互斥
*/
public class Test01 implements Runnable {
private String name;
private Test01(String name) {
this.name = name;
}
public synchronized void run() {
// System.out.println(name + " -> Start.");
// for(int i = 0; i < 20; i++) {
// System.out.println(name + "'s i=" + (i+1));
// }
// System.out.println(name + "X -> End.");
show();
}
public synchronized static void show() {
for(int i = 0; i < 20; i++) {
System.out.println("static 's j=" + (i+1));
}
}
public static void main(String[] args) {
Test01 t1 = new Test01("A");
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t1);
thread1.start();
thread2.start();
}
}
Java synchronized 非静态方法 静态方法的区别
最新推荐文章于 2024-09-10 08:22:37 发布