首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何控制玩转多线程

如何控制玩转多线程

作者头像
程序员云帆哥
发布2022-05-12 09:14:34
发布2022-05-12 09:14:34
6140
举报
文章被收录于专栏:程序员云帆哥程序员云帆哥

文章目录

1、join线程

join():让一个线程等待另一个线程完成的方法。 Join(long millis):在millis内被join的线程没有执行结束,则不再等待。

代码语言:javascript
复制
public class JoinThread extends Thread{
	public JoinThread(String name){
		super(name);
	}
	public void run(){
		for(int i=0;i<100;i++){
			System.out.println(getName()+" "+i);
		}
	}
	public static void main(String[] args) throws Exception {
		new JoinThread("新线程");
		for(int i=0;i<100;i++){
			if(i==20){
				JoinThread jt=new JoinThread("被Join的线程");
				jt.start();
				jt.join();//必须等jt执行结束才会向下执行
			}
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
	}
}

控制台输出:

代码语言:javascript
复制
	被Join的线程 96
	被Join的线程 97
	被Join的线程 98
	被Join的线程 99
	main 20
	main 21
	main 22
	main 23
	main 24
	main 25

2、后台线程

任务:为其他的线程提供服务 特征:如果所有的前台线程都死亡,后台线程会自动死亡。 setDaemon(true)方法将指定线程设为后台线程(必须在start()方法之前调用)。 isDaemon()方法用来判断指定线程是否为后台线程。

3、睡眠线程

sleep():让正在执行的线程暂停一段时间,并进入阻塞状态。 sleep(long millis):设置暂停时间

代码语言:javascript
复制
public class SleepThread extends Thread{
	public static void main(String[] args) throws Exception{
		for(int i=0;i<100;i++){
			System.out.println("当前时间:"+new Date());
			Thread.sleep(1000);//睡眠一秒
		}
	}
}

控制台输出:

代码语言:javascript
复制
	当前时间:Mon Apr 24 09:54:56 CST 2017
	当前时间:Mon Apr 24 09:54:57 CST 2017
	当前时间:Mon Apr 24 09:54:58 CST 2017

4、线程让步

yield():让正在执行的线程暂停,但不会阻塞该线程,而是转入就绪状态。

5、sleep() 和yield() 方法区别

(1)sleep()方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程的优先级;但yield()方法只会给优先级相同、或优先级更高的线程执行机会。 (2)sleep()方法会将线程转入阻塞状态,直到经过阻塞时间才会转入就绪状态;而yield()不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态。因为完全有可能某个线程调用yield()方法暂停之后,立即再次获得处理器资源被执行。 (3)sleep()方法声明抛出了InterruptedException异常,所以调用sleep()方法时要么捕捉该异常,要么显式声明抛出该异常;而yield()方法则没有声明抛出任何异常。 (4)sleep()方法比yield()有更好的移植性,通常不建议使用yield()方法来控制并发线程的执行。

6、改变线程优先级

Thread类提供了setPriority(int newPriority)、getPriority()方法来设置线程优先级。取值在1~10之间。 MAX_PRIORITY:其值是10 MIN_PRIORITY:其值是1 NORM_PRIORITY:其值是5

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 文章目录
  • 1、join线程
  • 2、后台线程
  • 3、睡眠线程
  • 4、线程让步
  • 5、sleep() 和yield() 方法区别
  • 6、改变线程优先级
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档