网站建设管理的措施办法,上海企业制作网站,查找公司信息的网站,中国建设银行网上银行官方网站更多面试题请看这里#xff1a;https://interview.raoyunsoft.com/
不是线程安全的。 操作符#xff08;自增操作#xff09;在多线程环境下存在竞态条件#xff08;Race Condition#xff09;#xff0c;因为它本质上是复合操作#xff0c;包含三个独立步骤#xff1a…更多面试题请看这里https://interview.raoyunsoft.com/
不是线程安全的。 操作符自增操作在多线程环境下存在竞态条件Race Condition因为它本质上是复合操作包含三个独立步骤
读取变量的当前值增加该值写回新值到内存
当多个线程同时执行 操作时这些步骤可能交叉执行导致最终结果不符合预期。❌ 非线程安全示例
public class Counter {private int count 0;public void increment() {count; // 非线程安全}public int getCount() {return count;}
}若两个线程同时调用 increment()可能出现以下情况
#mermaid-svg-JXPf6VbGumxMuX8L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JXPf6VbGumxMuX8L .error-icon{fill:#552222;}#mermaid-svg-JXPf6VbGumxMuX8L .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JXPf6VbGumxMuX8L .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-JXPf6VbGumxMuX8L .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JXPf6VbGumxMuX8L .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JXPf6VbGumxMuX8L .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JXPf6VbGumxMuX8L .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JXPf6VbGumxMuX8L .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JXPf6VbGumxMuX8L .marker.cross{stroke:#333333;}#mermaid-svg-JXPf6VbGumxMuX8L svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JXPf6VbGumxMuX8L .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JXPf6VbGumxMuX8L text.actortspan{fill:black;stroke:none;}#mermaid-svg-JXPf6VbGumxMuX8L .actor-line{stroke:grey;}#mermaid-svg-JXPf6VbGumxMuX8L .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-JXPf6VbGumxMuX8L .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-JXPf6VbGumxMuX8L #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-JXPf6VbGumxMuX8L .sequenceNumber{fill:white;}#mermaid-svg-JXPf6VbGumxMuX8L #sequencenumber{fill:#333;}#mermaid-svg-JXPf6VbGumxMuX8L #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-JXPf6VbGumxMuX8L .messageText{fill:#333;stroke:#333;}#mermaid-svg-JXPf6VbGumxMuX8L .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JXPf6VbGumxMuX8L .labelText,#mermaid-svg-JXPf6VbGumxMuX8L .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-JXPf6VbGumxMuX8L .loopText,#mermaid-svg-JXPf6VbGumxMuX8L .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-JXPf6VbGumxMuX8L .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-JXPf6VbGumxMuX8L .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-JXPf6VbGumxMuX8L .noteText,#mermaid-svg-JXPf6VbGumxMuX8L .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-JXPf6VbGumxMuX8L .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JXPf6VbGumxMuX8L .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JXPf6VbGumxMuX8L .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JXPf6VbGumxMuX8L .actorPopupMenu{position:absolute;}#mermaid-svg-JXPf6VbGumxMuX8L .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-JXPf6VbGumxMuX8L .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JXPf6VbGumxMuX8L .actor-man circle,#mermaid-svg-JXPf6VbGumxMuX8L line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-JXPf6VbGumxMuX8L :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}threadAcountthreadB读取值0读取值0此时threadA尚未写回计算011计算011写回1写回1覆盖了threadA的结果threadAcountthreadB
最终 count 的值可能是 1 而非预期的 2。✅ 线程安全解决方案
使用 synchronized 同步
public synchronized void increment() {count;
}使用 AtomicInteger推荐
private AtomicInteger count new AtomicInteger(0);public void increment() {count.incrementAndGet(); // 原子操作
}AtomicInteger 通过 CASCompare-And-Swap机制保证原子性无需锁竞争。关键结论方案线程安全性能适用场景 操作符❌ 不安全高单线程环境synchronized✅ 安全中低简单同步AtomicInteger✅ 安全高高并发计数实际开发中优先选择 AtomicInteger 等原子类避免显式锁带来的性能开销。