int setPriority : 设置线程优先级别

文章目录
时间片的概念
时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的 。
注意事项
线程章节所有主动进入阻塞状态的方法 都需要进行异常处理
因为Ta们都有 的声明 而这时一个非运行时异常 必须处理
线程章节所有的静态方法 不要关注谁调用方法 而要关注
调用出现在谁的线程体当中 出现在哪个线程体当中 就是操作哪个线程
(int) : 设置线程优先级别
可选范围1-10 默认优先级为5
线程优先级越高 代表抢到时间片的概率越高~
【intsetPriority : 设置线程优先级别】public class TestSetPriority{public static void main(String[] args){ThreadOne t1 = new ThreadOne();ThreadTwo t2 = new ThreadTwo();t1.setPriority(10);//个子高 抢到篮板球的概率高t2.setPriority(1);//你懂~t1.start();//t2.start();}}class ThreadOne extends Thread{@Overridepublic void run(){while(true){System.out.println("小明 去图书馆看书吗? 不!我还要打篮球");}}}class ThreadTwo extends Thread{@Overridepublic void run(){while(true){System.out.println("小明 去打篮球吗?不!我还要写小说拍电影~");}}}
sleep(long) : 让当前线程休眠指定的毫秒数~
public class TestSleep{public static void main(String[] args)throws Exception{EtoakThread et = new EtoakThread();et.start();et.sleep(5000);while(true){System.out.println("叶莉~");}}}class EtoakThread extends Thread{@Overridepublic void run(){try{sleep(5000);}catch(Exception e){e.printStackTrace();}while(true){System.out.println("姚明~");}}}
yield() : 让当前线程放弃已经持有的时间片 直接返回就绪状态**
public class TestYield{public static void main(String[] args){NumThread nt = new NumThread();CharThread ct = new CharThread();nt.start();ct.start();}}//并允许其它线程去运行 != 并执行其它线程class NumThread extends Thread{@Overridepublic void run(){for(int i = 1;i<=26;i++){System.out.println(i);Thread.yield();}}}class CharThread extends Thread{@Overridepublic void run(){for(char c = 'a';c<='z';c++){System.out.println(c);Thread.yield();}}}
join() : 让当前线程邀请另一个线程优先执行
在被邀请的线程执行结束之前 主动邀请别人的当前线程不再执行 一直阻塞
一个主动邀请别人的线程: 当前处于运行状态的线程 = join写在谁的线程体当中
被邀请优先执行的线程: 主动调用方法的那个线程
public class TestJoin{public static void main(String[] args)throws Exception{EtoakThread et = new EtoakThread();et.start();et.join(); //雷锋:主线程被邀请:etfor(int i = 0;i<1000;i++){System.out.println("梦回吹角连营~");}}}class EtoakThread extends Thread{@Overridepublic void run(){for(int i = 0;i<1000;i++){System.out.println("醉里挑灯看剑~");}}}
小总结
到现在为止 线程类的方法:
run() start() () sleep() yield() join()
小练习
《西游记》一个向往美好的和尚 与诸多动物一起旅游的故事~
故事涉及一堆线程:
有一个师傅线程 打印999次 “Only you 能伴我取西经…”
有一个猴哥线程 打印888次 “俺老孙来也~”
有一个八戒线程打印777次 “分行李吧 回高老庄”
有一个沙僧线程 打印666次 “大师兄不好了 师傅被妖怪抓走了~”
师傅天天逼逼叨很烦很烦 请将他的优先级设置为最低: (int);
猴哥想要给师弟们更多的表现机会于是前三次得到时间片都会主动放弃: yield();
八戒很懒 在执行操作之前要先休眠300毫秒: sleep(long);
沙僧很依赖猴哥 猴哥不死 他绝对不上: join();
答案在最后 先自己写哦~
public class BigOne{public static void main(String[] args){SF sf = new SF();sf.setPriority(1);sf.start();WK wk = new WK();wk.start();WN wn = new WN();wn.start();WJ wj = new WJ(wk);wj.start();}}class SF extends Thread{@Overridepublic void run(){for(int i = 0;i<999;i++){System.out.println("Only You 能伴我取西经~");}}}class WK extends Thread{@Overridepublic void run(){yield();yield();yield();for(int i = 0;i<888;i++){System.out.println("俺老孙来也~");}}}class WN extends Thread{@Overridepublic void run(){try{sleep(300);}catch(Exception e){e.printStackTrace();}for(int i = 0;i<777;i++){System.out.println("分行李吧 回高老庄~");}}}class WJ extends Thread{WK hg;public WJ(WK hg){this.hg = hg;}@Overridepublic void run(){try{hg.join();}catch(Exception e){e.printStackTrace();}for(int i = 0;i<666;i++){System.out.println("大师兄不好了 师傅被妖怪抓走了~");}}}