您的位置:首页 > 编程语言 > Java开发

Java学习笔记之线程的控制

2013-05-01 20:51 190 查看
join线程:Thread提供了让一个线程等待另一个线程完成的方法----join()方法

当某个程序执行流中调用了其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。

join()方法的三种重载方式:

1.join():等待被join的线程执行完成。

2.join(long millis):等待被join的线程的时间最长为millis毫秒。如果在millis毫秒内被join的线程还没有执行结束,则不再等待。

3.join(long millis,int nanos):等待被join的线程的最长时间为millis毫秒加nanos毫微秒。

后台的线程:指在后台运行的,为其他线程提供服务的线程,又称守护线程或精灵线程。如JVM的垃圾回收线程。

如果前台线程都死亡,后台线程将自动死亡。

调用Thread对象的setDaemon(true)方法可讲指定线程设置成后台线程,调用该方法必须在start()方法调用之前,否则会引发IllegalThreadStateException异常。

线程睡眠:如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态方法sleep()方法来实现。

sleep()方法的两种重载形式:static void sleep(long millis):让当前正在执行的线程暂停millis毫秒,并进入阻塞状态

static void sleep(long millis,int nanos):让当前正在执行的线程暂停millis毫秒加nanos毫微秒

线程让步:yield

Thread类的静态方法yield()可以暂停当前正在执行的线程,但不会阻塞该线程,而是将该线程转入就绪状态。

当某个线程调用了yield()方法暂停后,只有优先级与该线程相同或有更高优先级的处于就绪状态的线程才能获得执行的机会。

改变线程优先级:通过Thread类的setPriority(int new Priority)、getPriority()方法来设置和返回指定线程的优先级,其中setPriority()方法中的参数可以是一个整数,范围是1-10之间,也可以使用Thread类中的三个静态常量:MAX_PRIORIRY:其值为10;MIN_PRIORITY:其值为1;NORM_PRIORITY:其值为5。

main线程所创建的子线程的优先级默认都是6,不同的操作系统上的优先级不同,而且不能很好地和Java的10优先级对应,所以应该直接使用Java提供的三个静态常量来设置优先级,以保证程序的可移植性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: