CPU的问题,四核八线程的cpu

00:30 提问
java多线程操作同一个变量的问题,难道是多核cpu所致?
大家请看代码和输出结果,我百思不得其解,为什么 amount只加了一次,开始我以为是static所致,就算去掉也还是有几率出现这样的结果,难道是多核cpu真的把两个线程同时执行了?
public class MyRunnable implements Runnable {
public static int
public void run() {
// TODO 自动生成的方法存根
String s=Thread.currentThread().getName();
System.out.println(s+"
"+amount);
public class MyFirstThread {
public static void main(String[] args) {
// TODO 自动生成的方法存根
MyRunnable r1=new MyRunnable();
Thread AThread=new Thread(r1);
Thread BThread=new Thread(r1);
AThread.start();
BThread.start();
if((!AThread.isAlive())&&(!BThread.isAlive()))
System.out.println("amount ="+r1.amount);
按赞数排序
没有加同步锁的问题,两个线程是同时执行的,amount什么值都有可能,可能都是1,可能打印都是2,也可能打印2,1。所以需要对amount加同步锁
public static Integer
public void run() {
// TODO 自动生成的方法存根
synchronized(amount){
String s=Thread.currentThread().getName();
System.out.println(s+"
"+amount);
如果只有一个处理器,仍然可能出现线程同步的问题,和什么多cpu同时执行没有关系。
我再说清楚一些
这是因为amount++;不是原子化的操作,它是这样的
x = x + 1;
(这里x代表寄存器,amount代表内存)
我们假设你只有1个cpu,也就是执行本身不是并发的,但是有两个线程
假设amount = 0
此时x = 0, amount=0
切换到线程2
注意,x是寄存器,每个线程独立,而amount是共享的,只有一个,所以为了避免混淆,这里x写成x1表示另一个变量
此时x1=0 amount=0
x1 = x1 + 1;
再切换到线程1
x = x + 1;
再切换到线程2
amount = x1;
记住,x1=1
所以amount=1
结果是1而不是2
为什么这样?因为x存的数据是脏数据,amount被另一个线程更新了,但是x没有更新。
注意,以上代码不是并行执行的,同样有同步问题。
晕,线程没有同步,无论单核多核都需要线程同步。这是起码的常识。
无论单核多核都不是同步执行的,CPU在各个线程随机执行(优先级高的线程得到CPU执行的机会更多),你所看到的同步,其实是CPU在线程之间切换执行,只是速度太快,我们无法跟上。
可以看看龙书的线程同步,讲的十分仔细。
《operating system concepts》
对,单核时代,同一时刻,只有一个执行,现在多核时代了
13868关注|457收录
15508关注|1288收录
6571关注|687收录
其他相似问题<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&i5的四线程跟i7的八线程差的很多吗?
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因&
我看都是四核心的,难道多了这个4线程性能差了很多吗?
已有3个回答
[特聘专家]
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因×
擅长领域:
参与话题:
I7的四核心八线程来源于P4时代的超线程,当时还没有多核心CPU,要提升CPU的性能主要靠提升主频,而主频的提升又遇到了瓶颈(即使现在,默认主频也没有超过5G),INTEL就提出了超线程方案,即一个物理核心还可以增加一个模拟逻辑核心,用一个不太恰当的比喻,以前是每个人用一只手干活,超线程就相当于每人用两只手干不同的事,毕竟一人两只手干不同的活不如两人各出一只手干不同的活效率高,到双核时代,这一超线程技术就被封存了,直到第一代酷睿,才又重新启用,在INTEL桌面处理器中,用核心数量和是否有超线程来区分其定位:入门赛扬和奔腾是双核双线程,主流I3双核四线程,高端的I5四核四线程,旗舰I7四核八线程。
留下你的评论
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因×
擅长领域:
参与话题:
一个是四核四线程,一个是四核八线程。不一样的。四核八线程的是模拟八核。每个线程就相当于一桶水,每个核心就相当于一个人,四核八线程就像人突然爆发力气,一下子可以多提一倍的水。现在就英特尔的喜欢这样做。如果你玩游戏想多卡不卡很CPU有关系,还和内存有关系,内存小了,游戏多开提示内存不足,而且反应还很慢。线程越多机器多任务的情况下运行速度越快。如果你玩的游戏是大游戏的话,可以选四核心八线程的,如果一般的网页游戏小游戏的话,四核四线程的就够了。
留下你的评论
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因×
擅长领域:
参与话题:
是的,不然i7跟i5也不会差那么多钱了。不过这也是根据你需要选择,不玩什么大游戏或者干活做渲染什么的也用不着那么高的,买i5就够了
留下你的评论
微信公众账号ZOL问答堂
关注微信,随时随地解答您的疑惑
ZOL问答堂官方微博@ZOL问答堂
关注成功!该问题被回答后,将给您发送站内短信。
您也可以通过关注问答堂微信,及时获得您关注问题的回答。
微信关注问题方法“”帖子很冷清,卤煮很失落!求安慰
手机签到经验翻倍!快来扫一扫!
关于处理器的核心数及线程问题
853浏览 / 7回复
&#160; 今天无意中发现了一个问题,我本子上的I3怎么是单核单线程,CPU_Z和鲁大师检测出的结果都一样。I3不是双核四线程吗?请问这种情况该怎么处理?处理器数也只能选选择 1&#160;望高手指点一二,在此谢谢了!
我不晓得,只能帮你顶给高手解答拉
是奇怪啊,系统问题?
把那个核心数恢复默认!就是让那个选择框变灰!具体勾选下面哪个忘了!然后重启就行了!记住好了以后不要选择那个核心数了!本来开机就会调用两个核心的
哦!把那个处理器数勾去掉重启
您需要登录后才可以回帖&&&|&&&&&
可能感兴趣的板块:
用户名/注册邮箱/注册手机号
其他第三方号登录}

我要回帖

更多关于 cpu的核心数和线程数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信