多线程之synchronized+方法

根据前面的多线程之synchronized(this),我们在本实验中做一个对比。前面的博客在不是同一个对象的时候就会出现错误。

package thread;

public class SynchronizedCode implements Runnable {
    private int aa;

    public SynchronizedCode(int aa) {
        this.aa = aa;
    }

    public void run() {
        // synchronized (this) {
         systemOut();
        // }
    }

    public static synchronized void systemOut() {
        try {
            System.out.println("这是第一个" );
            Thread.sleep(100);
            System.out.println("-------" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SynchronizedCode sc1 = new SynchronizedCode(2000);
         SynchronizedCode sc2 = new SynchronizedCode(1000);
        Thread thread1 = new Thread(sc1);
        Thread thread2 = new Thread(sc2);
        thread1.start();
        thread2.start();
    }

}

实验结果如下:

这是第一个
-------
这是第一个
-------

我们给方法加锁的时候,不过是不是同一个对象,我们都能让他们有序进入这个方法。
我们也可以使用一下方法做出上面同样的结果,实验代码如下:

package thread;

public class SynchronizedCode implements Runnable {
    private int aa;

    public SynchronizedCode(int aa) {
        this.aa = aa;
    }

    public void run() {
         synchronized (SynchronizedCode.class) {
        try {
            System.out.println("这是第一个" );
            Thread.sleep(100);
            System.out.println("-------" );
        } catch (Exception e) {
            e.printStackTrace();
        }
         }
    }

//  public static synchronized void systemOut() {
//      try {
//          System.out.println("这是第一个" );
//          Thread.sleep(100);
//          System.out.println("-------" );
//      } catch (Exception e) {
//          e.printStackTrace();
//      }
//  }

    public static void main(String[] args) {
        SynchronizedCode sc1 = new SynchronizedCode(2000);
         SynchronizedCode sc2 = new SynchronizedCode(1000);
        Thread thread1 = new Thread(sc1);
        Thread thread2 = new Thread(sc2);
        thread1.start();
        thread2.start();
    }

}

实验结果如下:

这是第一个
-------
这是第一个
-------

可以看出synchronized无论锁定的是对象还是方法都能得到相同的结果。

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页