Java线程几种常用方法解析
sleep:
sleep让当前线程休眠指定的时间。休眠完成后,状态转到就绪状态。
yield: yield是放弃当前CPU资源,将CPU资源让给其他线程去使用,但放弃的时间不确定。
join:
大部分情况下,主线程启动了子线程,如果子线程需要完成大量复杂的运算,则主线程会先于子线程结束。但主线程如果需要在子线程运行完毕后使用子线程的结果,则必须在主线程中使用join,这样主线程会等待子线程结束,然后主线程再结束。
方法join,是使得所属线程对象x正常执行完run方法,而使当前线程z进行无限制阻塞,直到对象x结束后,再继续执行z后面的代码。
public class demo
{
public static void main(String[] args) throws InterruptedException
{
Thread producer = new Producer();
producer.start();
producer.join();
System.out.println("main end");
}
}
class Producer extends Thread
{
public void run()
{
for (int i = 0; i < 100000; i++)
System.out.println("producer end");
}
}
在以上案例中,当把producer.join()注释掉后,会先打印main end,再打印producer end。因为子线程运算复杂,所以主线程会先结束。而如果加上这一句,则主线程会等待producer线程的结束,主线程再销毁。也就是说,哪一个线程被调用,则必须等待该线程结束,调用的主线程才能继续执行下一步。