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);
}
}
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);
}
}
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);
}
}
调用start()方法后,t自动调用run方法。
请 问程序的输出结果是5吗?答案是:有可能。其实你很难遇到输出5的时候,通常情况下都不是5。当然这也和机器有严重的关系。为什么呢?我的解释是当主线程 main方法执行System.out.println(a);这条语句时,线程还没有真正开始运行,或许正在为它分配资源准备运行吧。因为为线程分配资 源需要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);,这个时候得到的结果是a还没有被 改变的值0。
我是我没看懂,怎么程序还可以跳着执行??
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);
}
}
我看懂了~你的程序太短了~CPU分给main线程的时间片没到期就跑完了~根本还没轮到T线程跑,因为还没轮到它~
手动调用run()肯定是5啊···等着自动就是你赋的初值0~
线程 有手动调用run()方法的么??
t.start(); //从主线程启动新的线程
System.out.println(a); //新的线程可能还没有实际执行,主线程已经执行到了这个所以
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");
}
}
}
这样就可以看出来了
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
书上都有介绍的。
因为main()是程序的入口,所以先执行了,即main()作为主线程起着创建其他线程的作用,等它创建好你写的那个线程,CUP给它(main)的时间片还没用完(同时也没有其他系统中断),这时,它会继续执行,所以把这时的a打印出来了,而因为这时a还是初始值0(因为你的线程还没执行),所以打印出来的就是0了,而不是5.