我们知道线程执行时机是CPU时间片轮询策略决定的,那么有没有办法让线程按指定的顺序执行呢?下面就通过JAVA提供的两种API来实现。
1.首先定义三个线程对象,用来模拟多线程执行顺序。
static
Thread
thread1
=
new
Thread(new
Runnable()
{
@Overridepublic
void run() {
System.out.println("1");
}});
staticThreadthread2=newThread(newRunnable()
{
@Overridepublic
voidrun()
{
System.out.println("2");
}});
staticThreadthread3=newThread(newRunnable()
{
@Overridepublic
voidrun()
{
System.out.println("3");
}});
2.定义main方
法:启动上面定义的函数
public static void
main(String[] args) throws
InterruptedException {
// thread1.start();
// thread1.join();
//这就是第一种让线程按指定顺序执行方法,threa1.join函数会使当前线程等待thread1线程执行完再执行,即main函数等thread1线程执行完再执行,
//join函数是synchronized的,当主线程调用thread1线程的join函数时,主线程就阻塞了,直到join方法结束,join函数调用了wait函数,等待子线程的结束。会唤醒主线程。
// thread2.start();
// thread2.join();
//同thread1一样
// thread3.start();
//第二张方法,使用创建单个线程的线程池,他会将提交的线程任务放入一个FIFO队,
//来保证按提交的线程任务顺序执行。队列是LinkedBlockingQueue类型的。
ExecutorService executor
=executors.newSingleThreadExecutor();
executor.submit(thread1);
executor.submit(thread2);
executor.submit(thread3);
executor.shutdown();
}