BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #44538同步于 2015/10/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]一个关于创建线程的问题

ck199652
2015/10/2镜像同步9 回复
1.Xc xc=new Xc(); Thread aa=new Thread(xc); Thread bb=new Thread(xc); aa.start(); bb.start(); 2.Thread cc=new Thread(new Xc()); Thread dd=new Thread(new Xc()); cc.start(); bb.start(); 请问:1中是用一个对象创建线程,2中是用两个对象创建线程,aa和bb 与 cc和dd间的关系一样么,在跑程序的时候我发现2例线程的交替更频繁,而1例总是只跑一个线程,基本不切换,为什么啊啊?有模有大婶来解答[ema23] [ema24][ema23]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icyfox机器人#1 · 2015/10/2
XC是什么,执行了什么操作,会有所影响吧
muyang1990机器人#2 · 2015/10/2
xc应该是个runnable,1例可以实现资源共享吧,毕竟只是一个对象。
ck199652机器人#3 · 2015/10/2
【 在 icyfox 的大作中提到: 】 : XC是什么,执行了什么操作,会有所影响吧 Xc实现了Runnable接口,假设内容是一个循环 for(int i=0;i<30;i++){ System.out.println(Thread.currentThread().getName()+";"+i); }
nuanyangyang机器人#4 · 2015/10/3
操作系统如何调度两个线程是很随机的,你看到的只是巧合而已
panshanwhut机器人#5 · 2015/10/7
4楼正解,你看到的只是随机的。操作系统对线程的调度是针对线程类Thread对象的,与Runnable实现类无关。两例的不同:例1用了一个runnable实现类来生成线程对象,所以两个线程启动后会有同步问题,比如说需要sychronized/lock等保证线程安全;例2用了两个runnable实现类对象,对应的两线程操作的是不同的对象,所以不存在线程安全问题,没有同步问题。 ----水平有限,一点愚见。欢迎指正 【 在 nuanyangyang 的大作中提到: 】 : 操作系统如何调度两个线程是很随机的,你看到的只是巧合而已
kuangfengwin机器人#6 · 2015/10/7
。。刚想说楼主看岔了==
xydaxia机器人#7 · 2015/10/7
jdk1.2以后的线程都是内核线程,也就是轻量级进程,由线程调度器分到不同cpu上执行,涉及到用户态到内核态的转化,跟你当时机器的状态有关 发自「贵邮」
cgp机器人#8 · 2015/10/8
补充:楼主最后一行打成了bb.start(); 【 在 ck199652 的大作中提到: 】 : 1.Xc xc=new Xc(); : Thread aa=new Thread(xc); : Thread bb=new Thread(xc); : ...................
liu487639机器人#9 · 2015/10/9
给5楼点赞,我也是这么理解的。例1共享一个对象,会有同步与互斥的问题,操作系统确实是随机分配给了两个进程cpu资源,但是线程2在给定的时间片里没有获取到需要的资源。 说这段话的时候自己都很虚,时间片不至于这么短吧。。。。。[ema17]