把一些教程上的java线程题上机操作,怎么结果差得那么远啊
比如
JAVA CODE:package occupycpu;public class Machine extends Thread
{
private static StringBuffer log = new StringBuffer();
private static int count = 0;

public void run()
{
for(int a=0;a<20;a++)
{
log.append(currentThread().getName()+":"+a+" ");
if(++count%10==0) log.append("\n");
}
}

public static void main(String[] args)
{
Machine machine1 = new Machine();
Machine machine2 = new Machine();

machine1.setName("m1");
machine2.setName("m2");

machine1.start();
machine2.start();
while(machine1.isAlive()&& machine2.isAlive())
try
{
Thread.sleep(500);
}
catch(InterruptedException e)
{
throw new RuntimeException(e);
}
System.out.println(log);
}
}
书上的结果是
m1:0 m1:1 m1:2 m1:3 m1:4 m1:5 m1:6 m1:7 m1:8 m1:9
m1:10 m1:11 m1:12 m1:13 m1:14 m1:15 m1:16 m1:17 m1:18 m1:19
m2:0 m2:1 m2:2 m2:3 m2:4 m2:5 m2:6 m2:7 m2:8 m2:9
m2:10 m2:11 m2:12 m2:13 m2:14 m2:15 m2:16 m2:17 m2:18 m2:19而我电脑的结果是
m2:0 m1:0 m2:1 m1:1 m2:2 m1:2 m2:3 m1:3 m2:4 m1:4
m2:5 m1:5 m2:6 m1:6 m2:7 m1:7 m2:8 m1:8 m2:9 m1:9
m2:10 m1:10 m2:11 m1:11 m2:12 m1:12 m2:13 m1:13 m2:14 m1:14
m2:15 m1:15 m2:16 m1:16 m2:17 m1:17 m2:18 m1:18 m2:19 m1:19怎么当machine1线程还没结束就开始执行machine2线程了呢还有为什么StringBuffer和count要声明为静态的呢我还有个问题:
通过继承Thread和实现Runnable来实现一个线程有什么不同呢??

解决方案 »

  1.   

    线程执行结果是环境依赖的 同一台机器每次都有可能不同
    相继start 只表示相继起跑 没其它含义
    用Runnable参数可以实现Thread方式无法实现的不同线程相同run方法
      

  2.   

    顺便问一下 在eclipse中怎样停止线程啊
    ctrl+c咋不管用啊
      

  3.   


    切换到debug透视图,那里可以看到还在运行的进程,选择它,然后点击红色小四方块结束它。
      

  4.   

    你那种情况肯定是错的,不可能在cpu的一个运行周期内就只start()一次,通常是运行了许多次,然后再调换的
      

  5.   

    我想问一下:他这样连续交换,是否说明他的cpu频率很高呢?
      

  6.   

    一个线程的被暂停后,恢复受系统影响,就算暂停的时间到了也可能得不到CPU的控制权。