返回信息流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]
这是一条镜像帖。来源:北邮人论坛 / java / #44538同步于 2015/10/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]一个关于创建线程的问题
ck199652
2015/10/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 icyfox 的大作中提到: 】
: XC是什么,执行了什么操作,会有所影响吧
Xc实现了Runnable接口,假设内容是一个循环
for(int i=0;i<30;i++){
System.out.println(Thread.currentThread().getName()+";"+i);
}
4楼正解,你看到的只是随机的。操作系统对线程的调度是针对线程类Thread对象的,与Runnable实现类无关。两例的不同:例1用了一个runnable实现类来生成线程对象,所以两个线程启动后会有同步问题,比如说需要sychronized/lock等保证线程安全;例2用了两个runnable实现类对象,对应的两线程操作的是不同的对象,所以不存在线程安全问题,没有同步问题。
----水平有限,一点愚见。欢迎指正
【 在 nuanyangyang 的大作中提到: 】
: 操作系统如何调度两个线程是很随机的,你看到的只是巧合而已
jdk1.2以后的线程都是内核线程,也就是轻量级进程,由线程调度器分到不同cpu上执行,涉及到用户态到内核态的转化,跟你当时机器的状态有关
发自「贵邮」
补充:楼主最后一行打成了bb.start();
【 在 ck199652 的大作中提到: 】
: 1.Xc xc=new Xc();
: Thread aa=new Thread(xc);
: Thread bb=new Thread(xc);
: ...................
给5楼点赞,我也是这么理解的。例1共享一个对象,会有同步与互斥的问题,操作系统确实是随机分配给了两个进程cpu资源,但是线程2在给定的时间片里没有获取到需要的资源。
说这段话的时候自己都很虚,时间片不至于这么短吧。。。。。[ema17]