3.多线程(同步、异步)
同步synchronized
1.同步的概念就是共享资源,如果不是为了共享资源没必要进行同步;同步的目的就是为了线程安全,线程安全只需要满足特性:原子性(同步)、可见性
package demo1;
/**
* Created by liudan on 2017/5/30.
*/
public class MyThread3 {
private synchronized void method1() {
try {
System.err.println("线程:" + Thread.currentThread().getName());
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private synchronized void metho2() {
System.err.println("线程:" + Thread.currentThread().getName());
}
public static void main(String[] agrs) {
/**
* 描述:1. a线程先获取t对象的锁,b线程可以异步访问t对象中 metho2() 无 synchronized 修饰的方法
* 2. a线程先获取t对象的锁,b线程争取去获取t对象的锁,这个时候对象使用都了同步 synchronized 修饰方法,a线程 sleep 休眠5秒、metho2()锁还没释放;5秒过后,锁被释放掉;
* b这个时候才真正的拿到t对象的锁,去访问 metho2 方法。
*/
MyThread3 t = new MyThread3();
Thread a = new Thread(new Runnable() {
@Override
public void run() {
t.method1();
}
}, "t1");
Thread b = new Thread(new Runnable() {
@Override
public void run() {
t.metho2();
}
}, "t2");
a.start();
b.start();
}
}
线程:t1
(延迟2秒)synchronized void metho2( 线程:t2