同步方法-java
除了同步代码块能实现同步执行外,同步方法也可以。
先看下同步代码块实现同步执行:
public class Demo4 { public static void main(String[] args) { Demo d = new Demo(); new Thread() { @Override public void run(){ while (true){ d.print1(); } } }.start(); new Thread() { @Override public void run(){ while (true){ d.print2(); } } }.start(); } } class Demo{ Object o = new Object(); public void print1(){ synchronized (o){ // synchronized ()传入一个对象即可,相当于一把锁 System.out.print("我"); System.out.print("好"); System.out.print("饿"); System.out.print("啊"); System.out.print("\n"); } } public void print2(){ synchronized (o){ // synchronized () 传入的对象要和上面的一样 System.out.print("想"); System.out.print("吃"); System.out.print("汉"); System.out.print("堡"); System.out.print("包"); System.out.print("\n"); } } }
同步方法实现同步执行:
public class Demo5 { public static void main(String[] args) { Demo6 d = new Demo6(); new Thread() { @Override public void run(){ while (true){ d.print1(); } } }.start(); new Thread() { @Override public void run(){ while (true){ d.print2(); } } }.start(); } } class Demo6{ public synchronized void print1(){ System.out.print("我"); System.out.print("好"); System.out.print("饿"); System.out.print("啊"); System.out.print("\n"); } public synchronized void print2(){ System.out.print("想"); System.out.print("吃"); System.out.print("汉"); System.out.print("堡"); System.out.print("包"); System.out.print("\n"); } }
同步方法的锁对象是什么呢?
在同步代码块实现同步执行的代码中,我们可以很清楚地看到锁对象是Object o(当然其他的也可以)。那么同步方法的锁对象是什么呢?
经过实验,发现:
非静态的同步方法的锁对象是this
静态的同步方法的锁对象是该类的字节码对象
代码成就万世基积沙镇海,梦想永在凌云意意气风发。