java并发性和多线程介绍

转:并发编程网中文章

 

在一个cpu下并发执行时伪并发,其实就是cpu的切换运行,一次还是只运行其中的一个线程,还是属于窜型。在多个cpu下运行时并行运行程序。多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发的读写操作,这就需要考虑数据的正确性和数据安全。

 

ThreadLocal是本地线程,在线程结束后,本地线程也会垃圾回收。其他线程访问不了。  当时用ThreadlOCAL维护变量时,Threadlocal为每个使用该变量的线程提供独立副本,所以每一个线程都可以改变自己的副本而不会影响其他线程。
threadlocal的使用类似于容器,有get,set,remove,还有就是
initalvalue()的初始化方法。

ThreadLocal和线程同步都是为了解决多线程中相同变量的访问冲突问题。在同步机制中,通过对象的锁机制保护对象在同一个时间内只有一个线程访问变量,这时候变量是多线程共享的。  而Threadlocal是为每一个线程提供一个变量副本,隔离多线程对数据的访问冲突。

同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。

spring使用ThreadLocal解决线程安全问题我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域。就是因为Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非线程安全状态采用ThreadLocal进行处理,让它们也成为线程安全的状态,因为有状态的Bean就可以在多线程中共享了。

 

线程隔离的秘密,就在于ThreadLocalMap这个类。ThreadLocalMap是ThreadLocal类的一个静态内部类.

 

线程池经常应用在多线程服务器上。每个通过网络到达服务器的连接都被包装成一个任务并且传递给线程池。线程池的线程会并发的处理连接上的请求

 

posted on 2017-04-11 22:23  大兴兴  阅读(128)  评论(0编辑  收藏  举报

导航