线程的状态---十九

/**
 * 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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值