同步就是有序的处理共享资源的相关对象或方法,异步就是没有顺序,多线程直接相互不影响,并发的去处理对象或方法。
加了synchronized代表是同步锁,是对共享资源加的锁,未加任何修改的方法就是异步的方法。
示例:
package com.lzf.thread;
public class MyObjectThread {
public synchronized void print() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void print2() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
final MyObjectThread mo = new MyObjectThread();
Thread t1 = new Thread(new Runnable() {
public void run() {
mo.print();
}
},"T1");
Thread t2 = new Thread(new Runnable() {
public void run() {
mo.print2();
}
},"T2");
t1.start();
t2.start();
}
}
执行结果如下:
T1
T2
等待4秒
说明:两个线程同时调用一个对象去执行一个同步方法,一个异步方法,两个线程之间执行顺序异步,t1先执行,t2执行,t1再休眠4秒。
我们如果给print2也加上synchronized,执行流程又会怎样呢?很显然t1获取了锁,t2只能等待t1执行完才能执行print2方法。
T1,等待4秒,T2