日期:2014-05-20  浏览次数:20695 次

一个java线程的小例子
正在学java线程,书上说,这个线程由于调用了pp.join()所以说在main线程计数到达100前,是双线程交替执行,main到达100后就只有别的线程执行,但是在我电脑上运行的是,main在一开始以迅雷不及掩耳盗铃之势就100了,没别的线程啥事儿,后来就单单是其他线程在执行。为什么啊,跟我电脑有关吗?

Java code

public class JoinThread
{
    public static void main(String[] args)
    {
        ThreadTest t=new ThreadTest();
        Thread pp=new Thread(t);
        pp.start();
        int i=0;
        while(true)
        {
            if(i==100)
            {
                try
                {
                    pp.join();
                }
                catch(Exception e)
                {
                    System.out.println(e.getMessage());
                }
            }
            System.out.println("main Thread " + i++);
        }
    }
}
class ThreadTest implements Runnable
{
    public void run()
    {
        String str=new String();
        int i=0;
        while(true)
        {
            System.out.println(Thread.currentThread().getName()+ " " + i++);
        }
    }
}




------解决方案--------------------
首先声明 本人新手 
如有错误 概不负责

把100 改大点,比如1000
------解决方案--------------------
pp.start();不代表线程马上被执行~~而是等待资源执行~~~
if(i==100) 也是到 100 才执行pp.join() 
join 方法的作用是使得本来异步执行的线程变成同步执行~~~
输出结果没啥问题~~~
------解决方案--------------------
100太小了,其实题目的意思是想让你看到2个线程开始是交替执行的,当main中的i到100的时候main等待另一个线程执行,知道等待的线程执行完了才继续main的执行。
由于100太小了,还没轮到第二个线程执行,main就开始等待了,所以输出楼主这样的结果。
或者你可以在main中i==50的时候Thread.sleep(10);一下,就能看到不同的输出了。