面试:很多人拿同一条数据,怎么保证不出错?

43 阅读2分钟

很多人拿同一条数据,怎么保证不出错?

:多线程同时拿同一条数据,需要保证数据的一致性和完整性,就需要使用到锁。例如:synchronized(同步锁), reentrantlock(灵活复杂锁), atomicinteger(原子性), volatile(变量可见性), threadlocal(线程独立副本), readwritelock(写入独占),或设置常量String或final(天然独占)。

你对并发怎么理解的?

:当有多个线程在操作时,如果系统只有一个CPU,它根本不可能同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状,这种就叫并发。

并发三要素

  • 原子性:在一个操作中,CPU 不可以在中途暂停然后再调度,要么执行完成,要么就不执行,如果出现只执行一部分的情况,就会导致数据不一致。(解决:synchronized, reentrantlock, atomic)
  • 可见性:多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。因为在多线程的环境中,每个线程都有自己的工作内存空间,线程之间的变量更新值时可能不会立即同步到主内存,就会导致其他线程读取到的值不是最新的。(解决:synchronized, reentrantlock, volatile)
  • 有序性:程序执行的顺序按照代码的先后顺序执行。但是在多线程的环境中,由于编译器优化和处理器优化,可能会导致指令重排序,从而破坏程序的顺序性。(解决:volatile, synchronized, reentrantlock)

关注公众号:咖啡Beans

在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。