今天学习线程的时候,对于并发问题有一点疑惑,书上关于这点的说明也比较详尽:
当同时运行的线程需要共享数据,此时需要考虑其它线程的状态和行为,否则不能保证程序运行结果的正确性。
同时还举了一个例子:三个人买票的问题。
按理来说应该很容易理解,但是我的一不小心钻进了一个牛角尖。
前面说到单CPU运行的时候一次只能调用一个线程,想到这里我觉得一次调用一个线程怎么还会出现并发的问题。。。。
思来想去没有结果,也没好好的百度。
在准备求助别人的时候忽然就通了!!
举个例子:
run(){
count++;
system.out.println(count);
}
上面这段代码,我们新建三个线程分别为线程1,线程2,count初始值为0
假设线程1先抢占到资源,在执行完count++这一行代码之后它释放CPU资源,这时被线程2抢占到资源线程2同样先执行count++然后执行system.out.print(count)这段代码,这时输出的第一行数字为2。
然而正常情况第一行输出的数字应该是1二这是却是2
这就出现了并发问题!!