【多线程】--线程同步

  熟悉多线程的都知道,传统的线程同步时,可以使用synchronized机制来实现,现在就具体的说一下这个synchronized的使用方法。

  1、只锁住部分代码    

synchronized (this) {
	for (int i = 0; i < length; i++) {
		System.out.print(name.charAt(i));
	}
	}
   在调用执行循环时,使用锁进行控制。这里需要注意参数this,表示当前调用对象,必须保持同步调用时的对象一致。


  2、锁住整个方法:    

public synchronized void output2(String name) {
   XXXX
}
   需要注意的地方是,当锁住方法时,如果使用了static静态变量,如果与不使用static的方法实现同步,要保证调用对象一致:使用加载字节码的方式,如下:    

public void output1(String name) {
	int length = name.length();	
	    synchronized (Outputer.class) {
		for (int i = 0; i < length; i++) {
			System.out.print(name.charAt(i));
		}
		}
		System.out.println();
	}

	public static synchronized void output3(String name) {
		int length = name.length();
		for (int i = 0; i < length; i++) {
			System.out.print(name.charAt(i));
		}
		System.out.println();
	}
    上述两方法中,第二个使用了static,加载调用对象时是从静态变量的字节码加载,所以第一种方法要想与第二种保持同步,也必须从字节码中加载,即使用了类名.class来实现。

原文地址:https://www.cnblogs.com/victor-grace/p/7253621.html