首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java编程思想中有关线程的一个例子解决方法

2012-03-26 
java编程思想中有关线程的一个例子Java codepackage testimport java.util.concurrent.*import static n

java编程思想中有关线程的一个例子

Java code
package test;import java.util.concurrent.*;import static net.mindview.util.Print.*;public class SimpleDaemons implements Runnable {    public void run() {        try {            while (true) {                TimeUnit.MILLISECONDS.sleep(100);                print(Thread.currentThread() +  "" + this);            }        } catch(InterruptedException e) {            print("sleep() interrupted");        }    }    public static void main(String[] args) throws Exception {        for (int i = 0; i < 10; ++i) {            Thread daemon = new Thread(new SimpleDaemons());            daemon.setDaemon(true);            daemon.start();        }        print("All daemons started");        TimeUnit.MILLISECONDS.sleep(175);//这儿这个175改成190结果中线程数量就会为20个,但是没到190时    }                         //线程结果数量就是10个, 真搞不懂, 按我理解的程序运行方式只要数字不到200结果                                      //就都是10个的, 我理解是这样的, 在main这个非后台线程睡眠过程中, 后台线程                     //先睡100ms, 然后运行print 显示结果, 如果在下一个100ms内main线程还没结束就继续print显示               //结果, 一直循环, 直到main线程结束.}


[解决办法]
出现这种结果,我认为的原因是: 
1 print("All daemons started");
TimeUnit.MILLISECONDS.sleep(175);
这两句执行用时大于175,(我测试时,175时,用时196,185时用时202).
所以你看到这块休眠不到200ms,有20个线程了。
2 那些后台线程都是先于main执行了,所以在180ms 附近,可能出现多于、少于或等于20个线程的情况。

楼主可以自己测试一下。

热点排行
Bad Request.