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。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值