1.在方法声明中使用,
synchronized放在范围操作符之后,返回类型之前,在此类的一个实例中,多个线程同步调用此方法,只有一个线程会执行此方法,其它线程会等待,等执行线程执行完后,另一个线程才会继续执行.如下面的例子.
注: 需在此类的同一个实例中,才能保证多个线程有序执行此方法.否则此关键字不会生效.
package thread;
public class ThreadTest {
class A{
public synchronized void test(int i) {
System.out.println("开始"+i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("结束"+i);
}
}
class B implements Runnable{
A a;
int i;
public B(int i,A a) {
this.i = i;
this.a = a;
}
public void run() {
a.test(i);
}
}
public static void main(String[] args) {
A a = new ThreadTest().new A();
B b = new ThreadTest().new B(1,a);
B c = new ThreadTest().new B(2,a);
new Thread(b).start();
new Thread(c).start();
}
}
执行结果:
开始1
结束1
开始2
结束2