?java——线程的强制运行

2019年2月17日22:40:56 发表评论 1,256 views
/**
 * Created by xabcd on 2019/2/17.
 */
public class testjoin
{
    public static void main(String[] args)
    {
        Threadtest t = new Threadtest();
        Thread pp = new Thread(t);
        pp.start();
        int i;
        for (i = 0;i<10;i++)
        {
            if (i == 5)
            {
                try {
                    pp.join();//强制运行完一段线程后,再运行后面的线程
                }

                catch(Exception e)
                {
                    System.out.println("Exception"+e.getMessage());
                }

            }
            System.out.println("main Thread "+i++);
            }
        }
    }

class Threadtest implements Runnable
{
    public void run()
    {
        String str = new String();
        int i = 0;
        for (int x = 0;x<10;x++)
        {
            System.out.println(Thread.currentThread().getName()+"--->>"+i++);
        }
    }
}

结果:
main Thread 0
Thread-0--->>0
main Thread 2
main Thread 4
main Thread 6
main Thread 8
Thread-0--->>1
Thread-0--->>2
Thread-0--->>3
Thread-0--->>4
Thread-0--->>5
Thread-0--->>6
Thread-0--->>7
Thread-0--->>8
Thread-0--->>9



main Thread总是偶数???


由上可见,pp线程中的代码被并入到了main之中(thrread0-rhread9是连续的),也就是pp线程中的代码不执行玩,main线程中的代码就只能一直等待着。查看JDK文档可以发现,除了无参数的join方法外,还有两个参数的join方法,分别是join(long millis)和join(龙millis,interesting nanos),它们的作用是指定合并时间,前者精确到毫秒,后者精确到纳秒,意思是两个线程合并指定的时间后,又开始分离,回到合并前的状态,可以试着改成有参数的,试试效果。




发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: