java线程放弃CPU使用权的三种方式

/**

* 接着上一次的线程问题,再继续探讨,不可以将问题提起又转去研究其他的问题了,不好的习惯

* 要坚持研究一个问题,量变才能达成质变,一个老师教会我的,目前为止,都有坚持在做某些事情

* 至于有些事情,自己喜欢做的,也就谈不上坚持了,那是心之所向,情之所至,不会想到“坚持”二字

* 也会一如既往滴去做,这就是人,当然,我木有说,探讨继续不是我的心之所向和情之所至。哈哈,

* 不扯了,今天就探讨下,线程的一些让出CPU的所使用的方法吧!这里不说线程进入阻塞状态的方法,

* 因为,在sleep,yield,join三种方法中,yield不是进入阻塞,而是从运行进入就绪状态,其他

* 两个方法是进入阻塞状态。下面就具体介绍一下吧!

*/

———Thread_Sleep.java

package com.cbh.thread_test;

public class Thread_Sleep extends Thread

{

public void run()

{

try

{

sleep(10000);//线程睡眠,让其他线程有执行的机会

System.out.println(“我睡了”);//如果线程可以被打断,这句将不输出。

}

catch (InterruptedException e)

{

//Thread_Sleep线程被打断时,会输出这句。

System.out.println(“睡不好,肯定有人来打断我的睡眠”); }

System.out.println(“线程结束了运行”); }

public static void main(String[] args)

{

Thread_Sleep ts=new Thread_Sleep();

ts.start();

try

{

Thread.sleep(1100); //睡眠时间少于Thread_Sleep的睡眠时间,可以打断Thread_Sleep线程,反之,则不可。

}

catch (InterruptedException e)

{

e.printStackTrace();

}

ts.interrupt();//打断Thread_Sleep线程

}

}

下面介绍下现场的让步和等待其他线程结束——–Thread_Yield_jion.java

package com.cbh.thread_test;

public class Thread_Yield_jion extends Thread

{

public void run()

{

for(int i=0;i<10;i++)

{

System.out.println(currentThread().getName()+”:”+i);

yield();

/*线程让步,所谓的让步就是礼让,退让的意思,可以理解为以示友好

*但是这里的让步是同一个优先级的让步,也就是人和人之间可以让步,动物和人之间就谈不上让步了

*和sleep一样,yield也是一个静态方法,它是让正在运行的线程,让步给其他线程,自己处于就绪状态中

*如果没人和你争,那就不用让步了,也就是没有同优先级的线程在等待CPU的话,就不用让步了,也就

谈不上yield了。

*/

}

}

public static void main(String[] args)

{

Thread_Yield_jion ty=new Thread_Yield_jion();

Thread_Yield_jion ty1=new Thread_Yield_jion();

ty.start();

System.out.println(“线程开始运行啦!”);

try

{

ty.join(); //从字面上来看,join是加入的意思,可以理解为加入其他线程。

但是,实际上,它的功能是主线程调用了Thread_Yield_jion线程的join方法,

自己等待,等到Thread_Yield_jion执行完毕之后,主线程才能继续向下执行

}

catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println(“运行结束了!”);

ty1.start();//如果不join的话,那就会并发执行,而是用join就会等待ty线程执行完毕才会执行ty1线程

} }

/*接下来谈下yield和sleep的区别:

* 虽然两者都是静态方法,也同样是让自己放弃CPU,让给其他线程机会,但是它们之间还是有区别滴!

* 1,sleep让给别人机会以后,自己处于阻塞状态,而yield处于就绪状态

* 2,sleep方法使用时要抛出异常,而yield什么都不做。

* 3,sleep会不考虑优先级的给其他线程机会,而yield是考虑同等优先级地给予其他线程机会!

* (可以类比为:一般情况下,同班同学才能让给他“扫把”使用,如果是外校的人,那么只有等我睡着了,

* 才会有让让他得到“扫把”的可能,原因是:优先级不一样)

* 4,sleep的可移植性比yield好,不能靠yield来提高程序的并发性能,它的唯一用途是在测试期间

* 人为地提高程序的并发性能,以帮助发现一些隐藏的错误。 */
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值