什么是线程安全?
线程安全是指的是某个函数、函数库在并发环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。
这里有几个要点:并发、多线程、共享变量
并发
并发与并行的关系
这里我采用形象的术语来描述,尽量让非本专业的人也能理解
并发是两个队伍交替使用一个机器,同一时刻只有某个队伍的某一个人可以使用,下一刻有可能是A队伍的人在使用,也有可能是B队伍的人在使用(看运气或者谁优先)。
并行是两个队伍同时使用两台机器,同一时刻AB队伍都有一个人在使用对应的机器。
多线程
进程和线程的关系
对于操作系统来说,一个任务就是一个进程,比如打开一个记事本是一个进程,打开两个记事本就启动了两个记事本进程。而在一个进程内部,要同时干很多事,这些子任务就被成为线程。
拿我们熟悉的java语言来说,jvm就是一个进程,多个jvm就是多个进程,而在jvm里面可以创建很多线程,多个线程之间共享jvm资源,并且多个线程并发执行。
共享变量
所谓共享变量,指的是多个线程都可以操作的变量。在jvm中,堆和方法区的区域是线程共享的。
静态变量、成员变量、局部变量
这三个分别放在jvm的方法区、堆内存、栈内存