熟悉多线程的都知道,传统的线程同步时,可以使用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来实现。