您的位置:首页 > 编程语言 > Java开发

Java synchronized 非静态方法 静态方法的区别

2016-09-13 17:04 363 查看
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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: