黑马程序员技术交流社区
标题:
大家看看这段程序,帮忙解释下
[打印本页]
作者:
付剑翊
时间:
2014-9-8 11:16
标题:
大家看看这段程序,帮忙解释下
class Demo extends Thread
{
private int i ;
synchronized public void run(){
for( i = 0;i<30;i++)
System.out.println(currentThread().getName()+" i = "+i);
}
}
class ThreadDemo
{
public static void main(String[] args)
{
Thread t1 = new Demo();
t1.start();
t1.run();
}
}
复制代码
为什么main线程和t1都是从0打印到29啊,其中一个不是把堆内存里的i改成29,另外的一个线程就不应该打印东西了啊
作者:
夜半风
时间:
2014-9-8 11:38
i不是局部变量吗
作者:
十万一千
时间:
2014-9-8 18:38
public class Tt {
public static void main(String[] args) {
Thread t1 = new Demo();
t1.start();
t1.run();
}
}
class Demo extends Thread {
private int i;
private int x;
synchronized public void run() {
for (i = 0; i < 30; i++) {
x++;
System.out.println(currentThread().getName() + " i = " + i + " x=" + x);
}
}
}
测试case用我这个试一试。
作者:
daoqin
时间:
2014-9-9 11:21
楼主,你晓得Thread.start() 和Thread.run()方法的区别吗?
我尽最大努力把问题解释清楚,不足之处,请赐教!
首先,之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。
1。。通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,
2。。而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的,而线程就是为了更好地利用CPU,提高程序运行速率的!
你的代码中既有start方法也加了run方法,所以主线程和T1线程都运行
start 方法运行T1;
run方法运行了主线程;
还是认真学习一下多线程吧,加油。
作者:
clh
时间:
2014-9-9 11:47
每次调用都被重新赋值了,注意那个private表示私有,不是static,如果是static,则是29 了
作者:
付剑翊
时间:
2014-9-17 12:51
clh 发表于 2014-9-9 11:47
每次调用都被重新赋值了,注意那个private表示私有,不是static,如果是static,则是29 了 ...
谢谢回复!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2