package dgb.test.concurrent;
import java.util.ArrayList;
/**
* @author Dongguabai
* @date 2018/8/31 16:32
*/
public class SynchronizedTest {
private static Object object = new Object();
private static void lock() {
System.out.println(Thread.currentThread().getName() + "开始------------");
synchronized (object) {
object = new ArrayList<String>();
System.out.println(Thread.currentThread().getName() + "进入synchronized------");
}
System.out.println(Thread.currentThread().getName() + "出synchronized");
}
public static void main(String[] args) {
new Thread(new SynchronizedTest .Thread1(), "张三").start();
new Thread(new SynchronizedTest .Thread1(), "李四").start();
}
static class Thread1 implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName() + "==============");
lock();
}
}
}
运行结果为:
或者:
总得来说 synchronized 能否生效是不确定的,这个就看“李四”线程在进入 synchronized 的那一瞬间 object 对象是否发生变化了。如果变化了,自然无法“锁”住,所以其实这样的测试是没什么意义的。