1. 程式人生 > >Java多執行緒基礎之物件鎖的同步與非同步

Java多執行緒基礎之物件鎖的同步與非同步

同步:synchronized

同步的概念就是共享,如果不是共享的資源,就沒有必要進行同步。

非同步:asynchronized

非同步的概念就是獨立,相互之間不受到任何制約。

同步的目的就是為了執行緒安全,對於執行緒安全來說,需要滿足兩個特性:

  1. (原子性)同步
  2. 可見性
public class MyObject {

    public synchronized void method1() throws InterruptedException {
        System.out.println(Thread.currentThread().getName());
        Thread.sleep(4000
); } public void method2(){ System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { final MyObject ob =new MyObject(); Thread t1 =new Thread(new Runnable() { @Override public void run() { try
{ ob.method1(); } catch (InterruptedException e) { e.printStackTrace(); } } },"t1"); Thread t2=new Thread(new Runnable() { @Override public void run() { ob.method2(); } },"t2"
); t1.start(); t2.start(); } }

上面的執行結果是 t1,t2同時打印出來,四秒鐘後執行結束,若將method2方法用synchronize修飾,則先執行t1執行緒,然後再執行t2執行緒,是非同步的。