A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-26 23:07  /  1204 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张甲甲 于 2013-5-27 10:00 编辑

看张老师的面试题里面有一个类
ScheduledExecutorService 类可以控制线程。
试着谢了一个
代码如下:
package com.itheima;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

public class Test{
        
public static void main(String[] args) {
        ScheduledExecutorService se=Executors.newScheduledThreadPool(1);
        for (int i = 0; i < 5; i++) {
                se.execute(new MyThead(i));
               
               
        }
        
        
        
}        
        
        
}
class MyThead implements Runnable{

        int count,number;
        public MyThead(int unmber) {
                super();
                this.number = unmber;
                System.out.println("thread-"+number+"is new");
        }
        @Override
        public void run() {
while(true){
                try {
                        Thread.sleep(1000);
                        System.out.println("thread"+number+"count="+count);
                        count++;
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
               
        }
}
        
}
运行结果如下:
thread-0is new
thread-1is new
thread-2is new
thread-3is new
thread-4is new
thread0count=0
thread0count=1
thread0count=2
thread0count=3
thread0count=4
thread0count=5
thread0count=6.........
执行以后为什么输出五个线程都被new出来了。 可是为什么只有一个线程在执行?

真心求解释




评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
首先,你使用ScheduledExecutorService 类  我不知道你想做些什么,但是,主线程运行到for循环的时候 先是创建一个线程. 你再去看你实现Runnable借口的那个类, 你放了个while(true) 然后内部根本没有结束while循环的语句?  你这就是一个线程一直被执行,它执行到你电脑报废的内一天。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我看你这个程序,我也不知道为什么会只有一个形成执行!
回复 使用道具 举报
最好把代码放在代码块里
回复 使用道具 举报
袁梦希 发表于 2013-5-27 00:22
最好把代码放在代码块里

我明白了  newScheduledThreadPool是创建一个线程池
如果把ScheduledExecutorService se=Executors.newScheduledThreadPool(1);
改成ScheduledExecutorService se=Executors.newScheduledThreadPool(5);
五个线程就能同时运行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马