多线程同时修改同各全局变量,会导致程序死掉么
谢谢
不会。(回答还得至少10个字符,真扯淡)
不是线程安全会导致数据紊乱。
数据可能会乱,但是程序不会死
不会导致程序死掉,但是如果多线程同时访问全局变量而没有作同步处理的话,那么最终修改的数据可能不合逻辑。
例如:数值序列生成器,简单的共享变量++操作。
public class UnsafeSequence{
private int value;
public int getNext(){
return value++;
}
}
getNext如果执行时机不对,那么两个线程在调用getNext时会得到相同的值,因为value++操作本身包含三种独立的操作,读value,value+1,写入value,这三个动作如果在多个线程之间交替执行,就可能导致最终的数据不合常理。
访问变量不是原子化操作,会造成脏读数据,结果出错,需要做线程同步。
线程同步做的不当,主要是锁和同步不正确会导致死锁(在现代多任务操作系统上不是死机,只是你的程序卡死了)。
主线程同步会导致程序死锁
在子线程上也会造成卡死