synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量。
很多synchronized里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。
而另外一种方式就是ThreadLocal方式,通过创建线程局部变量,以空间换时间的方式来让多线程并行执行。
原理:线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。但是在管理环境下(如 Web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。
主内存和工作内存之间的交互分为8个原子操作: - lock - unlock - read - load - assign - use - store - write - volatile修饰的变量,只有对volatile进行assign操作,才可以load,只有lo...