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。