/**
* 1)线程的状态
* 阻塞(sleep(),yiled(),jion())
* / \
* / \
* (new)新生--(start())就绪-------运行-----死亡()
* 2)停止线程(建议下面2中方式,温柔不暴力)
* 1、自然终止:线程体执行完毕,结束任务
* 2、外部干涉
* a、定义flag属性标识 b、线程体使用flag标识 c、对外提供改变flag属性的方法
* 3)线程阻塞
* 1、join(合并线程)成员方法:t.join()方法阻塞调用此t成员方法jion的线程(calling thread),直到线程t完成,
* 此线程再继续;通常用于在main()主线程内,等待t线程完成再结束main()主线程。
* 从这里应该能猜的到,Thread类的jion方法是加锁的,并且是个陷进,谁调用,谁在外面等。
* 2、yield静态方法: 暂停自己的线程,让出cpu调度,品格高尚!
* 3、sleep静态方法:休眠(睡觉),不释放锁 (抱着锁睡),其他线程不能访问,除非睡醒,结束线程。
* 应用场景:a、倒计时 b、模拟网络延时
*/
public class StateThr {
public static void main(String[] args) throws InterruptedException {
FourThr fth=new FourThr("马云"); //新生
Thread proxy=new Thread(fth,"黄牛甲");
proxy.start();//就绪
//就绪后,等待cpu调度分配时间片---运行
Thread.sleep(5000);//放票时间5秒
fth.stop();//线程终止,死亡
}
}
class FourThr implements Runnable{
private int tickets=50;
private String name;
private boolean flag=true;
public FourThr(String name) {
this.name = name;
}
@Override
public void run() {//线程体
while(flag){
try {
task();
Thread.sleep(500); //模拟延时时间,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
public void stop(){
flag=false;
}
}
* 1)线程的状态
* 阻塞(sleep(),yiled(),jion())
* / \
* / \
* (new)新生--(start())就绪-------运行-----死亡()
* 2)停止线程(建议下面2中方式,温柔不暴力)
* 1、自然终止:线程体执行完毕,结束任务
* 2、外部干涉
* a、定义flag属性标识 b、线程体使用flag标识 c、对外提供改变flag属性的方法
* 3)线程阻塞
* 1、join(合并线程)成员方法:t.join()方法阻塞调用此t成员方法jion的线程(calling thread),直到线程t完成,
* 此线程再继续;通常用于在main()主线程内,等待t线程完成再结束main()主线程。
* 从这里应该能猜的到,Thread类的jion方法是加锁的,并且是个陷进,谁调用,谁在外面等。
* 2、yield静态方法: 暂停自己的线程,让出cpu调度,品格高尚!
* 3、sleep静态方法:休眠(睡觉),不释放锁 (抱着锁睡),其他线程不能访问,除非睡醒,结束线程。
* 应用场景:a、倒计时 b、模拟网络延时
*/
public class StateThr {
public static void main(String[] args) throws InterruptedException {
FourThr fth=new FourThr("马云"); //新生
Thread proxy=new Thread(fth,"黄牛甲");
proxy.start();//就绪
//就绪后,等待cpu调度分配时间片---运行
Thread.sleep(5000);//放票时间5秒
fth.stop();//线程终止,死亡
}
}
class FourThr implements Runnable{
private int tickets=50;
private String name;
private boolean flag=true;
public FourThr(String name) {
this.name = name;
}
@Override
public void run() {//线程体
while(flag){
try {
task();
Thread.sleep(500); //模拟延时时间,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",帮"+this.name+",抢到第"+(tickets--)+"张票");
}
}
public void stop(){
flag=false;
}
}