1、 线程间调度的常用方法
1.1 join()方法
pubblic final void join() : 让父线程等待子线程结束后才继续运行
pubblic final void join(mills:long) : mills 以毫秒为单位的等待时长
pubblic final void join(mills:long,int nanos) : nanos 要等待的附加纳秒时长
join()的使用场景:
在实际开发中,我们很少会使用thread.join()
在实际使用过程中,我们可以通过join()方法来等待线程执行的结果
我们通过以下伪代码来说明join的使用场景
public void joinDemo(){
//....
Thread t=new Thread(otherService);
t.start();
//....
//其他业务逻辑处理,不需要确定t线程是否执行完
insertData();
//后续的处理,需要依赖t线程的执行结果,可以在这里调用join方法等待t线程执行结束
t.join();
}
1.2 Thread.yield()方法
Thread.yield():
暂停当前线程,允许其他具有同等优先级的线程获得运行机会
yield 即“谦让”,也是Thread类的方法,它让掉当前线程CPU的时间片,使正在运行中的线程重新变成就绪状态,并重新竞争CPU的调度权。它可能会获取到,也有可能被其他线程获取到
yield和sleep的异同
1、yield,sleep都能暂停当前线程,sleep可以指定具体的休眠时间,而yield则依赖cpu的时间片去划分
2、yield、sleep 两个在暂停过程中,如以及持有锁,则都不会释放锁资源
3、yield不能被中断、而sleep则可以接受中断片
2、线程间的同步(安全)
2.1 线程安全(synchhronized),同步锁,安全锁说明
当多个线程对象调用同一个对象的方法时,同一时刻只能有一个线程可以使用资源,其他线程需要等待当前线程将对象资源释放之后才可以继续使用
可以用来修饰一个