----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
多线程与CPU和内存的关系
来自百度知道.
这个回答我认为是很好的比喻了.
CPU对进程操作时不是同时进行,我们知道windows操作系统里面有许多的进程,而CPU是一个一个的来操作这些进程的,当然,多核CPU就可以实现同时操作这些进程,所以为什么CPU核数越多电脑速度越快就是这样,但是内存是一个瓶颈,不能超过这个内存数.
根据上面说的CPU是一个一个的来控制着进程的(高速切换),那么就会出现一个问题,如果我们启动多个线程控制着一个进程里面的数据时,因为CPU是一个一个的处理,而线程可以实现并发,万一要是CPU刚好处理到这里以后跳到其他进程处理时,启动的线程又在处理这个进程的数据,那么就会出现安全隐患,比如:
2个线程控制一个进程的数据
其中一个线程1执行这个进程的数据时CPU刚好切换,线程1被挂起.
这时如果线程2获得CPU执行权时,线程2就执行这个进程的数据,执行完线程1被激活执行数据.
int x = 1;
String name;
int Money;
void run()
{
if(x > 0)//线程1判断完符合条件被挂起,线程2进入判断符合条件
{
x = x - 1;
name = “kvieta丶心灵”;
Money += 1000;
//银行核心代码
……
}
}
根据以上代码结合文字说明,那么我的账户上面岂不是有了2000块钱了!赚了…
解决办法:java中提供一个关键字synchronized,它包括两种用法:synchronized 方法和 synchronized 块
详情可以参阅API.
同步函数中控制线程的进出用this,同步的静态函数中控制线程的进出用该函数所属的类对应的字节码文件.