线程的定义
轻量级进程,英文Lightweight Process,LWP。是程序执行流行的最小单元。一个标准的线程是由线程ID,当前指令指针(PC),寄存器集合和堆栈构成。线程是依附于进程的,进程是分配资源的最小单位,一个进程可以生成多个线程,这些线程拥有共享的进程资源。就每个线程而言,只有很少的独有资源,如控制线程运行的线程控制块,保留局部变量和少数参数的栈空间等。线程是可以访问所属进程内存中的所有数据,在数据共享方面是有很高效率的,如果有需要,有些时候线程也会去访问其它线程的数据。
线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样在堆中的对象的值就产生变化了。在这里顺便说下volatile这个关键字,volatile修饰的变量,线程每次使用变量时,都会读取变量修改后的最新值,但volatile并不表示原子性操作,它只能保证该变量被修改后马上更新到主存(即保证下一个要读取的线程可以读取到最新值),若是之前已经被其他线程读取到线程的工作内存,那么该变量是不会更新过去的,不过只要能保证线程执行的时序问题,就可以认为是原子性操作。