黑马程序员技术交流社区
标题:
多线程和同步执行?
[打印本页]
作者:
李节起
时间:
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