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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫运飞 中级黑马   /  2012-4-6 09:18  /  1627 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Test extends Thread
{
        public void run()
{
               
        {
        for(int x=0;x<80;x++)
               
               
                System.out.println("线程跑起来"+x);}

}
}
class ThreadDemo
{

        public static void main(String[] args)

{
        Test d=new Test();
        d.run();
       

        for(int x=0;x<80;x++)
        System.out.println("线程停止"+x);

}}


程序运行起来应该是混乱的,因为程序里面有main 主线程和d线程,这两个程序同时存在并运行。
多线程有一个特性:随机性,就是哪个线程抢到内存的资源就执行谁。
,所以程序里面main 主线程和d线程互强系统内存的资源,谁抢到了就先执行谁,这样打印出来的结果就是没有顺序的。
且每次运行程序打印的结果都不一样。

但为什么在这里怎么打印的怎么都是有顺序的呢???????????









5 个回复

倒序浏览
   这个你必须设置一个高点的循环数 才可能 看出来,因为,cpu的运行速度是非常快的。
回复 使用道具 举报
你调用的方法不对 ,   Test d=new Test();        d.run(); 改成   d.start();   这样运行的结果就是无序的了, 你调用run()方法, 线程根本没有和主方法一起运行
你调用start()方法,这样才启动线程,这样主方法和线程同时运行,结果也就是无序的了 .
回复 使用道具 举报
把for循环的条件静态式写大一点,要不就让它一直转,看到了按然后按ctrl+c
回复 使用道具 举报
你没发现 你继承了Thread类,复写了run()
但是那里就直接调用d.run()了。。根本没开启线程
回复 使用道具 举报
哥们,这只是建立了线程,但是没有开起线程,我也刚学到这里。你应该加一个d.start()在d.run()前面就可以跑起来了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马