public class ThreadTest implements Runnable {
public static int a = 0;public void run() {
for (int k = 0; k < 5; k++) {
a = a + 1;
}
}public static void main(String[] args) throws Exception {
Runnable r = new ThreadTest();
Thread t = new Thread(r);
t.start();
System.out.println(a);
}
}

解决方案 »

  1.   

    public void run() {
    for (int k = 0; k < 5; k++) {
    a = a + 1;
    }
    }public static void main(String[] args) throws Exception {
    Runnable r = new ThreadTest();
    Thread t = new Thread(r);
    t.run();//这样应该就可以是5了
    System.out.println(a);
    }
    }
      

  2.   

    光t.start()了没有调用run()啊···
      

  3.   


    调用start()方法后,t自动调用run方法。
      

  4.   

    答案是:
    请 问程序的输出结果是5吗?答案是:有可能。其实你很难遇到输出5的时候,通常情况下都不是5。当然这也和机器有严重的关系。为什么呢?我的解释是当主线程 main方法执行System.out.println(a);这条语句时,线程还没有真正开始运行,或许正在为它分配资源准备运行吧。因为为线程分配资 源需要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);,这个时候得到的结果是a还没有被 改变的值0。
    我是我没看懂,怎么程序还可以跳着执行??
      

  5.   

    public class ThreadTest implements Runnable {
    public static int a = 0;
    public void run() {
    for (int k = 0; k < 5; k++) {
    a = a + 1;
    System.out.println(k);//     这样你就可以看出来了,,
    }                     //main的主线程先执行了,,而 a的初始是0,,则打印出0,而之后,子线程运行了,
                             //就开始打印了            
    }public static void main(String[] args) throws Exception {
    ThreadTest r = new ThreadTest();
    Thread t = new Thread(r);
    t.start();
    System.out.println(a);
    }
    }
      

  6.   

    我看懂了···main线程的时间片没有到期程序就执行完了~~所以没有给线程T分配CPU资源~T就没有执行~
      

  7.   


    我看懂了~你的程序太短了~CPU分给main线程的时间片没到期就跑完了~根本还没轮到T线程跑,因为还没轮到它~
      

  8.   


    手动调用run()肯定是5啊···等着自动就是你赋的初值0~
      

  9.   

    怎么程序还可以跳着执行??t.start();还没准备好呢,它就向下运行了阿?
      

  10.   


    线程 有手动调用run()方法的么??
      

  11.   

    t.sleep(10);你加这么一行~让你的t线程sleep一下,就会等到轮到给t线程资源了~就是5了~
      

  12.   

    A是全局变量 初始化值==0Thread t = new Thread(r);
    t.start();                 //从主线程启动新的线程   
    System.out.println(a);     //新的线程可能还没有实际执行,主线程已经执行到了这个所以
      

  13.   

    package com.shsoso.struts.action;public class ThreadTest implements Runnable {
    public static int a = 0;
    public void run() {
    for (int k = 0; k < 500000; k++) {
    System.out.println("b");
    }
    }public static void main(String[] args) throws Exception {
    ThreadTest r = new ThreadTest();
    Thread t = new Thread(r);
    t.start();
    for(int i=0;i<500000;i++)
    {
    System.out.println("a");
    }
    }
    }
    这样就可以看出来了
      

  14.   

    答案确实如此!你可以多写几个System.out.println(a);就可以看到有0输出也有5输出。
      

  15.   


    public class ThreadTest implements Runnable {
    public static int a = 0;public void run() {
    for (int k = 0; k < 5; k++) {
    a = a + 1;
    }
    }public static void main(String[] args) throws Exception {
    Runnable r = new ThreadTest();
    Thread t = new Thread(r);
    t.start();
    t.join();
    System.out.println(a);
    }
    }加入这个join方法,就能得到你要的5了
    要给分哦
    j
      

  16.   

    你的程序中有两个线程,其中mian线程比较小,首先运行先输出a的值,然后才运行你自己创建的线程,
    书上都有介绍的。
      

  17.   

    你的程序是双线程,主线程mian和你写的线程。
    因为main()是程序的入口,所以先执行了,即main()作为主线程起着创建其他线程的作用,等它创建好你写的那个线程,CUP给它(main)的时间片还没用完(同时也没有其他系统中断),这时,它会继续执行,所以把这时的a打印出来了,而因为这时a还是初始值0(因为你的线程还没执行),所以打印出来的就是0了,而不是5.
      

  18.   

    其实这个就是双线程的现象,你自己new的线程和main主线程在并列执行。而在你.start()后,你建立的那个线程开始执行run,但是,main线程也还在执行。main执行完输出后,你建的线程才可能刚开始执行到for循环里面去。所以就输出0了。你可以在for循环里面写上输出语句看下,它绝大多数情况是在你输出0后再开始打印for里面的输出项
      

  19.   

    在“System.out.println("a:"+a);”前你可以加一些循环语句:“for(int i=0;i<8000000;i++);”,调整一下循环的次数,多运行几次,看看结果,有时候是“0”,有时候是“5”。