/**
* 接着上一次的线程问题,再继续探讨,不可以将问题提起又转去研究其他的问题了,不好的习惯
* 要坚持研究一个问题,量变才能达成质变,一个老师教会我的,目前为止,都有坚持在做某些事情
* 至于有些事情,自己喜欢做的,也就谈不上坚持了,那是心之所向,情之所至,不会想到“坚持”二字
* 也会一如既往滴去做,这就是人,当然,我木有说,探讨继续不是我的心之所向和情之所至。哈哈,
* 不扯了,今天就探讨下,线程的一些让出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来提高程序的并发性能,它的唯一用途是在测试期间
* 人为地提高程序的并发性能,以帮助发现一些隐藏的错误。 */
* 接着上一次的线程问题,再继续探讨,不可以将问题提起又转去研究其他的问题了,不好的习惯
* 要坚持研究一个问题,量变才能达成质变,一个老师教会我的,目前为止,都有坚持在做某些事情
* 至于有些事情,自己喜欢做的,也就谈不上坚持了,那是心之所向,情之所至,不会想到“坚持”二字
* 也会一如既往滴去做,这就是人,当然,我木有说,探讨继续不是我的心之所向和情之所至。哈哈,
* 不扯了,今天就探讨下,线程的一些让出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来提高程序的并发性能,它的唯一用途是在测试期间
* 人为地提高程序的并发性能,以帮助发现一些隐藏的错误。 */