java内存模型分析:
我们都知道计算机有高速缓存的存在,并不是每次操作都是去内存中的数据;java定义了自己的内存模型,屏蔽了底层的平台内存管理细节。java内存模型(jmm)规定了jvm有主存,主内存是被线程共享的,但是每个线程有自己的工作内存,当线程操作某一数据的时候会先从主存中拷一副本到工作内存,操作完成在刷新提交到工作内存,
线程安全分析:
线程安全无非就是要控制线程对某一资源的操作修改,
所以当多个线程操作同一对象的时候,该对象在每个线程中都存在副本,线程操作各自工作内存中的对象副本,完成之后提交主内存中,如果某一线程操作完成提交,另外以对象同样操作完成提交,这时候主存中保存的对象只能是其中一个线程修改后的资源,就造成对主存中资源操作和修改的混乱;
线程同步:
如果主存中某一资源操作通过synchorized限制,当去操作该资源的时候就会检查是否有其他线程在使用该资源,如果存在则该线程处阻塞转台,等正在操作资源的线程释放资源后,才能操作;
我们都知道计算机有高速缓存的存在,并不是每次操作都是去内存中的数据;java定义了自己的内存模型,屏蔽了底层的平台内存管理细节。java内存模型(jmm)规定了jvm有主存,主内存是被线程共享的,但是每个线程有自己的工作内存,当线程操作某一数据的时候会先从主存中拷一副本到工作内存,操作完成在刷新提交到工作内存,
线程安全分析:
线程安全无非就是要控制线程对某一资源的操作修改,
所以当多个线程操作同一对象的时候,该对象在每个线程中都存在副本,线程操作各自工作内存中的对象副本,完成之后提交主内存中,如果某一线程操作完成提交,另外以对象同样操作完成提交,这时候主存中保存的对象只能是其中一个线程修改后的资源,就造成对主存中资源操作和修改的混乱;
线程同步:
如果主存中某一资源操作通过synchorized限制,当去操作该资源的时候就会检查是否有其他线程在使用该资源,如果存在则该线程处阻塞转台,等正在操作资源的线程释放资源后,才能操作;