线程安全:
何为线程安全?在JVM分配的内存空间中,当一份数据被多个线程访问时,如果涉及修改,此时数据按照正常逻辑变化,而不是发生一些意想不到的结果,此时该数据为线程安全
java中哪些线程安全
1.变量:局部变量与实例变量,局部变量在每次方法调用时,都会开辟栈空间,不涉及到共用一份内存中的数据,同理实例变量也一样,所有线程安全
类变量(static),在内存中共享一份内存空间,因此为非线程安全
2.方法:如果类方法与实例方法中不涉及到对静态变量的修改等操作,则也为线程安全
解决方式:
1.使用代码锁机制,也就是synchronized,对内存中共享的数据采用锁机制,每次只允许一个线程进行访问修改,采用以时间换空间,保证数据一致性
2.使用ThreadLoacle机制,也就是线程局部变量,每个线程都会分配一份数据,线程对该数据的改动都是基于线程自己的,而不会影响到其他线程,保证了各线程数据的一致性,采用以空间换时间的机制
总结:
结合java 内存空间的分配来理解多线程安全问题