volatile
和synchronized一起比较会好理解。同一个变量,什么都不用,各线程处理时,变量值在同一时间,可能是不同的;volatile能保证同一时间,变量值是一致的;synchronized能保证修改变量值是一个一个线程排队来的(比如同一时间,线程1和线程2都读取了变量i=1,没有问题,但是不用synchronized,就会同时修改i,如果是i=6,这样是没有问题的,因为不依赖任何东西,如果是i++,就非常有问题了,两个线程,++两次,应该i=3,由于没有synchronized,各搞各的,可能最后值为2)。
volatile保证读一致,synchronized保证读写一致。
volatile修饰变量,synchronized修改方法/代码块。
还有一点对理解很重要,java有主内存,就是说每个线程会把变量保存在线程局部,用了volatile就只会保存在共享。
和synchronized一起比较会好理解。同一个变量,什么都不用,各线程处理时,变量值在同一时间,可能是不同的;volatile能保证同一时间,变量值是一致的;synchronized能保证修改变量值是一个一个线程排队来的(比如同一时间,线程1和线程2都读取了变量i=1,没有问题,但是不用synchronized,就会同时修改i,如果是i=6,这样是没有问题的,因为不依赖任何东西,如果是i++,就非常有问题了,两个线程,++两次,应该i=3,由于没有synchronized,各搞各的,可能最后值为2)。
volatile保证读一致,synchronized保证读写一致。
volatile修饰变量,synchronized修改方法/代码块。
还有一点对理解很重要,java有主内存,就是说每个线程会把变量保存在线程局部,用了volatile就只会保存在共享。