Java多线程调度方法

1、sleep()方法——休眠

线程休眠的方法是:Thread.sleep(long millis) 

                                Thread.sleep(long millis, int nanos)

线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。

2、yield()方法——让步

线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。如果有多个线程,具体把权限让给谁了,它不知道。

3、join()方法——合并/联合

一个线程A在占有CPU资源期间,可以让其他线程调用join()和本线程联合,如B.join()

我们称A在运行期间联合了B。如果线程A在占有CPU资源期间一旦联合B线程,那么A线程将立刻中断执行,一直等到它联合的线程B执行完毕,A线程再重新排队等待CPU资源,以便恢复执行。如果A准备联合B线程已经结束,那么B.join()不会产生任何效果。

public class JoinTest
{
	public static void main(String[] args) throws Exception
	{
		ThreadJoin thread=new ThreadJoin();
		Thread threadA=new Thread(thread);
		Thread threadB=new Thread(thread);
		threadA.setName("A");
		threadB.setName("B");
		threadA.start();//启动threadA、threadB
		threadB.start();
		thread.setJoinThread(threadB);
	}
    
}

class ThreadJoin implements Runnable
{
	Thread joinThread;
	void setJoinThread(Thread t)
	{
		joinThread=t;
	}

	@Override
	public void run()
	{
		// TODO Auto-generated method stub
		if (Thread.currentThread().getName().equals("A")) {
			for(int i=0;i<3;i++)
			{
				System.out.println("A:"+i);
				try {
					joinThread.join();//合并B线程,在B线程执行完成之后,再执行A线程
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		} else if (Thread.currentThread().getName().equals("B")) {
			for(int i=0;i<3;i++)
			{
				System.out.println("B:"+i);
			}
		}

	}

}


线程不合并的一种情况,交替执行。


threadB.join()之后,threadA暂停执行,将threadB执行完之后再执行threadA。


你可能感兴趣的:(多线程)