Java多執行緒基礎之物件鎖的同步與非同步
阿新 • • 發佈:2019-02-05
同步:synchronized
同步的概念就是共享,如果不是共享的資源,就沒有必要進行同步。
非同步:asynchronized
非同步的概念就是獨立,相互之間不受到任何制約。
同步的目的就是為了執行緒安全,對於執行緒安全來說,需要滿足兩個特性:
- (原子性)同步
- 可見性
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執行緒,是非同步的。