5各类,都继承自Thread,但互相之间没有任何关系。我用主类中的方法启动它们。跟踪的结果发现ThreadGroup中一共有5个Thread,依次是Thread_1,Thread_2,Thread_3,Thread_4,Thread_5,用getState()获得的状态都是Runable,优先级都是5,但是,除了Thread_5以外,其它的Thread始终无法获得CPU时间片,感觉成了单线程了啊。不想这样的。
这个有什么办法分析或者跟踪下那?
这个有什么办法分析或者跟踪下那?
调试欢乐多
其它的线程就没有获得时间片啊。
Thread_5是一个处理消息的线程,所以由一个while(true)作为主体。但我在里面已经放了个sleep(500)进去,可是其它的线程仍然不能获得CPU时间片。
? 问题是:
其它的线程就没有获得时间片啊。
Thread_5是一个处理消息的线程,所以由一个while(true)作为主体。但我在里面已经放了个sleep(500)进去,可是其它的线程仍然不能获得CPU时间片。---------------------
一个线程有sleep后,其他线程是肯定能获得时间片的.除非你只启动了这么一个线程
回复人:anod() ( 二级(初级)) 信誉:93 2007-6-3 1:57:41 得分:0
? 是一个软件的一部分,好多......
能不能指个方向,我再跟踪试试看...............
--------------------------------------------------
把程序里面注释到只保留线程相关的代码,试试..成功再加其他代码,分批试.
{
public static void main(String[] args)
{
Thread_1 th_1 = new Thread_1();
th_1.start();
Thread_2 th_2 = new Thread_2();
th_2.start();
Thread_3 th_3 = new Thread_3();
th_3.start();
Thread_4 th_4 = new Thread_4();
th_4.start();
Thread_5 th_5 = new Thread_5();
th_5.start();
}
}class Thread_1 extends Thread
{
public void run()
{
while(true)
System.out.println(getName());
}
} class Thread_2 extends Thread
{
public void run()
{
while(true)
System.out.println(getName());
}
}class Thread_3 extends Thread
{
public void run()
{
while(true)
System.out.println(getName());
}
}class Thread_4 extends Thread
{
public void run()
{
while(true)
System.out.println(getName());
}
}class Thread_5 extends Thread
{
public void run()
{
while(true)
System.out.println(getName());
}
}5个线成 全运行了呀
}WHILE的时候一定要加SLEEP,不然会在一个线程上耗死资源的
}windows下分配cpu片好像是每个线程都有机会去运行了
认为必须加sleep的(象下面),可错得很严重啊。如果必须加sleep的话,那还要vm调度线程干嘛啊。
while(true){
......
Sleep(1000);
}
我写了个简单的测试贴在下面,验证一个问题:不用sleep线程仍然可以调度。
当然,我的问题还是没有解决,正在查原因,象supernpc说的那样,谢谢他。不过希望他不要真的是NPC:-).....package test;public class TestThread
{
public static void main(String[] args)
{
new T1().start();
new T2().start();
new T3().start();
}
}class T1 extends Thread
{
public void run()
{
while (true)
{
System.out.print("11111111111\n");
}
}
}class T2 extends Thread
{
public void run()
{
while (true)
{
System.out.print("22222222222\n");
}
}
}class T3 extends Thread
{
public void run()
{
while (true)
{
System.out.print("33333333333\n");
}
}
}
所谓“未分配到CPU时间片的线程”其实不是真的。真实情况是:
在这个线程的run()里面调用了一个InputStream的read(),而这个read()是阻塞的,所以造成了没有分配到CPU时间片的假象,其实是被阻塞了。
此时如果查看所有线程的状态,这个线程是“RUNABLE”,这一点开始也让我很迷惑。
主要原因,还是自己学艺不精,真是汗啊。
再次谢过大家了。