帮忙看下这个代码为什么不执行多线程

清竹小雨 2012-06-06 11:33:17

public class TestThread1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Runner1 r = new Runner1();
//Thread t = new Thread();

r.start();

for(int i = 0; i < 100; ++i)
{
System.out.println("main thread:" + i);
}
}

}

class Runner1 extends Thread
{
public void run()
{
for(int i = 0; i < 100; ++i)
{
System.out.println(i);
}
}
}
...全文
388 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sad4This 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
引用 16 楼 的回复:

不能光看结果,是cpu执行太快了,你在每个for循环里面sleep 个1毫秒看看,就会有效果了

可以了,像三楼这种代码是执行两个线程还是一个线程?
[/Quote]
我觉得应该是2个
for(int i = 0; i < 100; ++i)
{
System.out.println("main thread:" + i);
}
主函数算一个
Runner1 r = new Runner1();
Thread t = new Thread(r);

t.start();

自己声明的算一个
Jobernowl 2012-06-07
  • 打赏
  • 举报
回复
for(int i=0;i<100;i++){
new Thread(){
@Override
public void run() {
System.out.println(Math.random()*100);
}
}.start();
}


这样才是接近于同时执行100个线程
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

xuexileha
[/Quote]
你想表达什么
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

你这两段代码都是按线程执行的呀,,有啥问题呐?

(其中第1段代码,打印100次太少了,看不出效果,把它改成1000就可以看出效果了~~~)
[/Quote]
3楼已经改了
liuhuabai100 2012-06-06
  • 打赏
  • 举报
回复
你这两段代码都是按线程执行的呀,,有啥问题呐?

(其中第1段代码,打印100次太少了,看不出效果,把它改成1000就可以看出效果了~~~)
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

不是这样写的
你对多线程理解反了
你这样想
Runnable是一个任务,比如一个类实现了一个任务,让这个类实现Runnable接口就表明这个任务有放在多线程里的可能。
Thread是一个线程,但没有任务,所以是一个空的线程。
new Thread(Runnable)就是把这个任务放进了线程里,让这个线程来执行这个任务,而不是由其它线程执行。
然后thread.start()就是把这个……
[/Quote]
3楼不是实现了Thread(Runnable)吗?怎么还没有效果出来呢
jlu_lamp_lamp 2012-06-06
  • 打赏
  • 举报
回复
不是这样写的
你对多线程理解反了
你这样想
Runnable是一个任务,比如一个类实现了一个任务,让这个类实现Runnable接口就表明这个任务有放在多线程里的可能。
Thread是一个线程,但没有任务,所以是一个空的线程。
new Thread(Runnable)就是把这个任务放进了线程里,让这个线程来执行这个任务,而不是由其它线程执行。
然后thread.start()就是把这个线程启动起来,线程就会执行任务了
这样理解就容易多了
huage 2012-06-06
  • 打赏
  • 举报
回复
刚才看错了,写法是正确的 我直接考代码执行了,可以运行哈
windows1430 2012-06-06
  • 打赏
  • 举报
回复
线程执行了,因为你只启用1个线程所以效果看不出来,你可以


public void run()
{
for(int i = 0; i < 100; ++i)
{
sleep(1000);
System.out.println(i);
}
}



这样测试的时候,效果就明显了
huage 2012-06-06
  • 打赏
  • 举报
回复

static class Runner1 extends Thread
{

public void run()
{
for(int i = 0; i < 100; ++i)
{
System.out.println(i);
}
}
}
这样试试
_jerrytiger 2012-06-06
  • 打赏
  • 举报
回复
不会吧 , 代码没问题啊。
你是不是运行后 他们没有交叉执行?
这个很正常 , 因为你循环的次数只有100 , 你再运行几次试试。
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不是这样写的吧
[/Quote]

public class TestThread1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Runner1 r = new Runner1();
Thread t = new Thread(r);

t.start();

for(int i = 0; i < 1000; ++i)
{
System.out.println("main thread:" + i);
}
}

}

class Runner1 implements Runnable
{
public void run()
{
for(int i = 0; i < 1000; ++i)
{
System.out.println(i);
}
}
}
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不是这样写的吧
[/Quote]
看马士兵的视频,按照它的代码写的
huage 2012-06-06
  • 打赏
  • 举报
回复
不是这样写的吧
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

有交替打印
[/Quote]
开始的时候没有的,现在有了
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

不能光看结果,是cpu执行太快了,你在每个for循环里面sleep 个1毫秒看看,就会有效果了
[/Quote]
可以了,像三楼这种代码是执行两个线程还是一个线程?
Lactoferrin 2012-06-06
  • 打赏
  • 举报
回复
有交替打印
淡定的峰哥 2012-06-06
  • 打赏
  • 举报
回复
不能光看结果,是cpu执行太快了,你在每个for循环里面sleep 个1毫秒看看,就会有效果了
清竹小雨 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

楼主怎么判断的程序没有多线程呢?1楼跟3楼实现没什么区别。
[/Quote]
看打印出来的东西啊
sffx123 2012-06-06
  • 打赏
  • 举报
回复
楼主怎么判断的程序没有多线程呢?1楼跟3楼实现没什么区别。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧