黑马程序员技术交流社区

标题: 多线程和同步执行? [打印本页]

作者: 李节起    时间: 2012-4-9 11:29
标题: 多线程和同步执行?
[code=java]class L
{
        public static void main(String[] args)
        {
                Runnable  mt1=new MyThread();
                Runnable  mt2=new MyThread();
                new Thread(mt1).start();
                new Thread(mt2).start();
        }
}


class MyThread implements Runnable
{
    public void run()
        {
                for(int i=0;i<100;i++)
                {
                   System.out.println(Thread.currentThread().getName()+":"+i);
                }
        }
} [/code]




从这个程序里面,打印的结果是:
Thread-0:0
Thread-1:1
Thread-0:2
Thread-1:3
Thread-0:4


我的问题是多线程不是同步执行的吗?
如果是这样,那打印结果应该是这样
Thread-0:0
Thread-1:0
......
同步执行


求解
作者: 曾晓文    时间: 2012-4-9 11:55
代码没错啊,2个线程打印各自的数据 i。不会出现共享 局部变量 i 的情况。因为你new了2个对象,i 为对象的非静态成员 里的局部变量,所以不会出现共享的。
作者: 邓海涛    时间: 2012-4-9 12:04
兄弟你问得很好啊,
public class TestThread
{
        public static void main(String[] args)
        {
                Runnable  mt1=new MyThread();
                Runnable  mt2=new MyThread();
                new Thread(mt1).start();
                new Thread(mt2).start();
        }
}


class MyThread implements Runnable
{
    public void run()
        {
                for(int i=0;i<100;i++)
                {
                        try{
                                Thread.sleep(300) ;
                        }catch(Exception e){
                                e.printStackTrace() ;
                        }
                   System.out.println(Thread.currentThread().getName()+":"+i);
                }
        }
}


为了解决你的疑问,我在里面加入了延时,这样你就应该能理解同步的问题了吧?就比如说一张票,被四个人同时在四个窗口去抢着买,如果四个窗口的售票机都延迟一下给人票的那个过程,那么一张票就被卖了四次,恐怖吧?希望我这样说了你能理解
作者: 邓海涛    时间: 2012-4-9 12:06
多线程是同步执行的,但是如果你不加入延迟的话,时间太短了,你没给他机会让去去把同步的那个事实摆在你的眼前啊,我加了延迟以后,效果就出来了,你自己理解下
作者: pray    时间: 2014-4-26 07:39
 楼主的帖子实在是写得太好了。文笔流畅,修辞得体,深得魏晋诸朝遗风,更将唐风宋骨发扬得入木三分,能在有生之年看见楼主的这个帖子。实在是我三生之幸啊。看完楼主的这个帖子之后,我竟感发生出一种无以名之的悲痛感??啊,这么好的帖子,如果将来我再也看不到了,那我该怎么办?那我该怎么办?直到我毫不犹豫的把楼主的这个帖子收藏了。我内心的那种激动才逐渐平复下来。可是我立刻想到,这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗?经过痛苦的思想斗争,我终于下定决心,我要把这个帖子一直往上顶,往上顶!顶到所有人都看到为止。  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2