对象锁的同步与异步

来源:互联网 发布:奥特曼皮套购买淘宝 编辑:程序博客网 时间:2024/05/19 18:41

同步:synchronized

同步的概念就是共享,我们要牢记“共享”,如果不是共享资源就没有必要进行同步。

异步:aynchronized

异步的概念就是独立,相互之间没有制约。


同步的目的就是为了线程安全,线程安全需要满足两个特性:

原子性

可见性


示例:

package com.线程间通信;

public class MutiThread2 {

public synchronized void method1() throws InterruptedException{
System.out.println(Thread.currentThread().getName());
Thread.sleep(4000);
}
//synchronized
public void method2(){
System.out.println(Thread.currentThread().getName());
}

public static void main(String[] args) {

final MutiThread2 obj = new MutiThread2();

Thread t1 = new Thread(new Runnable() {

public void run() {
try {
obj.method1();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, "t1");

Thread t2 = new Thread(new Runnable() {

public void run() {
obj.method2();
}
}, "t2");

t1.start();
t2.start();

}

}

解释代码:

在method2前面不加synchronized关键字,说明两个线程t1和t2之间是无关的,是异步的。

加上synchronized关键字后,则t1线程和t2线程是共享一个obj锁对象的,当t1线程获取obj

对象时,t2线程只能等待,是同步的。t1和t2线程是共享了obj对象。

0 0
原创粉丝点击