我是靠谱客的博主 贪玩帅哥,最近开发中收集的这篇文章主要介绍Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
- sleep(时间)指定当前线程阻塞的毫秒数;(1000=1秒)
- sleep存在异常InterruptedException;
- sleep时间达到后线程进入就绪状态(放大问题的发生性);
- sleep可以模拟网络延时,倒计时等;
- 每个对象都有一个锁,sleep不会释放锁;
yield(礼让)
礼让线程,让当前正在执行的线程暂停,但不阻塞。
将线程从运行状态转为就绪状态。
让cpu重新调度,礼让不一定成功!看CPU心情。
白话解释:就比如现在有一个线程A和线程B需要执行,经过CPU调度A先执行,但是A想礼让给B,A就出来了。出来之后并不是B立马执行,而是AB又在同一个地方等待CPU调度,有可能还是A执行。
public class TestYield{
public void static main(String[] args){
MyYield myYield = new MyYield();
new Thread(myYield,"A").start();
new Thread(myYield,"B").start();
}
}
class MyYield implements Runnable{
public void run(){
System.out.println(Thread.currentThread().getName()+"线程开始执行");
Thread.yield();//礼让。
System.out.println(Thread.currentThread().getName()+"线程开停止执行。");
}
}
Join
- Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
- 可以想象成插队
//测试join,插队
public class TestJoin implements Runnable{
public void run(){
for(int i = 0;i < 100;i++){
System.out.println("线程vip来了!"+i);
}
}
public static void main(String[] args) throw Exception {
//启动线程
TestJoin testJoin = new TesstJoin();
new Thread(testJoin).start();
//主线程
for(int i = 0;i < 1000;i++){
if(i == 200){
thread.join;//插队
}
System.out.println("main"+i)
}
}
}
线程状态
线程优先级
- Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。
- 线程的优先级用数字表示,范围从1~10。
Thread.MIN_PRIORITY = 1;
Thread.MAX_PRIORITY = 10;
Thread.NORM_PRIORITY = 5;- 使用以下方式改变或获取优先级;
getPriority().setPriority(int xxx)- 优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了,这都是看CPU调度。
public class TestPriority{
public static void main(String[] args){
//主线程默认优先级5
System.out.println(Thread.currentThreadd().getName()+"--->"+Thread.currentThreadd().getPriority());
MyPriority myPriority = new MyPriority();
Thread t1 = new Thread(myPriority);
Thread t2 = new Thread(myPriority);
Thread t3 = new Thread(myPriority);
Thread t4 = new Thread(myPriority);
Thread t5 = new Thread(myPriority);
Thread t6 = new Thread(myPriority);
//先设置优先级,再启动
t1.start();
t2.setPriority(1);
t2.start();
t3.setPriority(4);
t3.start();
t4.setPriority(Thread.MAX_PRIORITY);//10
t4.start();
t5.setPriority(-1);//错
t5.start();
t6.setPriority(11);//错
t6.start();
}
}
class MyPriority implements Runnable{
public void run(){
System.out.println(Thread.currentThreadd().getName()+"--->"+Thread.currentThreadd().getPriority());
}
}
最后
以上就是贪玩帅哥为你收集整理的Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级)的全部内容,希望文章能够帮你解决Java基础(线程休眠sleep、礼让yield、合并线程Join、线程的状态、线程优先级)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复