小白笔记(线程1),后续发现问题会进行修改,大神勿喷,谢谢。

一、线程的状态

1.新生状态
2.就绪状态
3.运行状态
4.就绪状态
5.死亡状态

二、停止线程

1.自然终止:线程体正常执行完毕
2.外部干涉
1)线程类中定义线程体使用标识
private boolean flag = true;
2)线程体中使用该标识

@Override  

public void run() {
    //线程体使用该标志
    while(flag) {
        System.out.println("study thread");
    }
    
}

3)提供对外的方法来改变此标识

public void stop(){
    this.flag = false;
}  

4)外部方法根据条件调用此方法
s.stop();

三、阻塞

1.join:合并线程
2.yield:暂停自己的线程(静态的方法)
3.sleep:休眠,暂停当前线程,此时不会释放锁
1)与时间相关

package com.bjsxt.thread.status;  


import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 倒计时
 * 倒数1个数,一秒打印一个
 * 倒计时
 * @author Administrator
 *
 */
public class SleepDemo01 {
    public static void main(String[] args) throws InterruptedException {

        Date endtime = new Date(System.currentTimeMillis()+10*1000);
        long end = endtime.getTime();
        while (true) {
            //输出
            System.out.println(new SimpleDateFormat("mm:ss").format(endtime));
            //等待一秒
            Thread.sleep(1000);
            //10s内继续,否则跳出
            endtime = new Date(endtime.getTime()-1000);
            if (end-10000>endtime.getTime()) {
                
                break;
            }
        }
        
    }
    public static void test01() throws InterruptedException{
        int num = 10;
        while(true) {
            System.out.println(num--);
            //暂停休眠睡眠
            Thread.sleep(1000);
            if (num<=0) {
                break;
            }
        }
    }
}  

2)模拟网络延时

package com.bjsxt.thread.status;

/**
 * sleep模拟网络延时
 * 可能会导致程序不准确,《线程不安全》
 * @author Administrator
 *
 */
public class SleepDemo02 {
    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        Web12306 web = new Web12306();
        
        //代理
        Thread t1 = new Thread(web,"路人甲");
        Thread t2 = new Thread(web,"黄牛已");
        Thread t3 = new Thread(web,"工程甲");
        
        //启动线程
        t1.start();
        t2.start();
        t3.start();
    }
}
class Web12306 implements Runnable{
    private int num = 50;
    @Override
    public void run() {
        while(true) {
            if (num<=0) {
                break;
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //同一份资源,引起的并发问题
            System.out.println(Thread.currentThread().getName()+" 抢到了 "+num--);
        }
        
    }

}

https://blog.csdn.net/it_manman/article/details/79402064?utm_source=blogxgwz0

猜你喜欢

转载自www.cnblogs.com/thoiol/p/10349222.html