JavaSE---多线程---线程的控制
Posted anpeiyong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE---多线程---线程的控制相关的知识,希望对你有一定的参考价值。
1、Java提供了一些工具方法,可以便捷控制线程的执行:
1.1 join
Thread提供了让一个线程等待另一个线程执行完成的方法:join;
当某个程序的执行流中调用其他线程的join方法,该线程将被阻塞,直到被加入的线程执行完成为止;
package com.an; public class ThreadTarget implements Runnable //多线程共享资源i private int i; public void run() for (;i<20;i++) System.out.println(Thread.currentThread().getName()+"="+i); public static void main(String[] args)throws InterruptedException for (int i=0;i<30;i++) System.out.println(Thread.currentThread().getName()+"="+i); //当i==15时,main线程将被阻塞,test-one线程启动执行,直到test-one线程执行完成,main线程才继续执行 if (i==15) ThreadTarget threadTarget=new ThreadTarget(); Thread thread=new Thread(threadTarget,"test-one"); thread.start(); thread.join();
1.2 sleep
sleep可以将当前线程暂停一段时间,进入阻塞状态;
package com.an; public class ThreadTest public static void main(String[] args) for (int i=0;i<30;i++) System.out.println(Thread.currentThread().getName()+"="+i); //当i==15时,main线程将被阻塞,5000毫秒后继续执行 if (i==15) System.out.println("5000毫秒后执行..."); Thread.sleep(5000);
1.3 yield
yield可以让当前线程暂停,但不会进入阻塞,而是直接进入就绪状态(只有优先级相同或者比该线程优先级高的线程才会获得执行机会);
package com.an; public class ThreadTest public static void main(String[] args) for (int i=0;i<30;i++) System.out.println(Thread.currentThread().getName()+"="+i); //当i==15时,main线程将重新进入就绪状态 if (i==15) Thread.yield();
1.4 改变线程的优先级
getPriority()、setPriority()
以上是关于JavaSE---多线程---线程的控制的主要内容,如果未能解决你的问题,请参考以下文章