Java线程知识点笔记

一、Java线程控制

1. join线程
Thread类提供join()方法。在线程执行体中调用其他线程的join()方法会让调用线程阻塞,等待被调用线程执行完毕才继续执行。
下面代码中线程t1的run()方法中创建线程t2,并调用线程t2的join()方法,让t1线程阻塞,等待t2线程执行完毕后继续执行。所以t1输出i=19后等待t2输出完成,再从i=20开始输出。
join()方法的常用重载方法join(long time),该方法使线程等待最长time毫秒的时间,如果被调用线程超时没有执行完也不再等待。

Thread t1 = new Thread((Runnable)()->{
	for (int i=0; i<100; 1++){
		if (i == 10) {
			Thread t2 = new Thread((Runnable)()->{
				for (int k=0; k<10; k++) {
					System.out.println("线程" + getName() + k);
				}
			}).start()
			t2.join();
		}
		System.out.println("线程" + getName() + i);
	}
}).start()

2. 后台线程
后台线程(Daemon Thread),也称为“守护线程”、“精灵线程”。后台线程用于为其他线程提供特定的服务,如JVM的GC线程。
Thread类的setDaemon(true)实例方法设置线程为后台线程,isDaemon()方法判断线程是否后台线程。当所有的前台线程运行结束后,后台线程也就会结束运行。设置线程为后台线程必须在调用start()方法前调用setDaemon(true)方法,否则会引发异常。
下面程序设置t1线程为后台线程,程序运行之后,t1线程并不会完成20000次的输出,而是在main方法线程输出10次结束之后随之结束运行。

public static void main(String[] params){
	Thread t1 = new Thread((Runnable)()->{
		for (int i=1; i<=20000; i++){
			System.out.println("" + i);
		}
	}).setDaemon(true).start();
	for (int k=1; k<=10; k++){
		System.out.println("k" + k);
	}
}

3. 线程睡眠sleep
Thread类的sleep(long time)方法和yield()方法,两方法都是静态方法。sleep()方法有一个long型的时间参数,单位为毫秒,使线程下面指定时间,线程休眠期间其他线程获得处理器资源,休眠之后线程继续执行。sleep()方法会抛出InterruptedException异常。yield()方法和sleep()方法类似,但是yield()方法暂停线程是保持优先级不变的情况下使线程状态变为就绪状态,这时只有比该线程优先级高或者相同的线程能获得处理器资源,如果没有则该线程继续执行。
下面程序运行演示线程执行休眠2秒。

public static void main(String[] patams) throws Exception {
	for (int i=1; i<=100; i++){
		System.out.println("输出:" + i);
		Thread.sleep(2000);
	}
}

4. 线程优先级
每个线程运行都具有一定优先等级,线程的初始优先级默认和创建该线程的父线程的优先级保持一致。程序运行时,高优先级的线程获得更多运行机会。
Thread类提供setPriority(int proirity)实例方法设置优先级,int参数prioroty为1~10之间的整数,也可以使用Thread类的三个静态常量:
MAX_PRIORITY: 10
MIN_PRIORITY: 1
NORM_PRIORITY: 5 (普通优先级)
getPriority()实例方法获取线程对象的优先级。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a digger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值