同步:synchronized
同步的概念即是共享,当某个资源需要共享时。可以使用同步,同步的目的是保证线程的安全
实例1
public class MyThread3 {
public synchronized void method1(){
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void method2(){
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
final MyThread3 myThread3 = new MyThread3();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
myThread3.method1();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
myThread3.method2();
}
},"t2");
t1.start();
t2.start();
}
}
运行结果(结果出来的时间几乎同时)
t1
t2
实例2
public class MyThread3 {
public synchronized void method1(){
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void method2(){
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
final MyThread3 myThread3 = new MyThread3();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
myThread3.method1();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
myThread3.method2();
}
},"t2");
t1.start();
t2.start();
}
}
运行结果(t1 打印4秒后 才打印的t2)
t1
t2
分析原因:
t1线程先持有object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法
t1线程先持有object对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步