线程的详解

        线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

        我理解进程就像一个管道,并没有真正的执行,而线程就像管道里的每一条水流,线程才是cpu执行调度真正单位。

首先咱们说

线程的创建

第一种方式就是继承别人写好的Thread类

重写run方法体 调用start方法进入准备就绪状态等待cpu调用

public class OneThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("线程1"+i);
        }
    }

    public static void main(String[] args) {
        OneThread oneThread = new OneThread();
        oneThread.start();
        for (int i = 0; i < 1000; i++) {
            System.out.println("线程2"+i);
        }
    }
}

第二种方式是直接实现Runnable接口

public class TwoThread implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("线程1"+i);
        }
    }

    public static void main(String[] args) {
        TwoThread twoThread = new TwoThread();
        new Thread(twoThread,"线程1").start();
        for (int i = 0; i < 1000; i++) {
            System.out.println("线程2"+i);
        }
    }
}

第三种是实现Callable接口

不过多解释。

线程的生命周期

线程的停止

利用标识符,true或者false停止循环来停止线程。

线程的休眠

sleep方法

Thread.sleep(3);利用线程休眠循环获取当前时间
public class SleepThread implements Runnable{

    @Override
    public void run() {
        //获取系统时间
        while(true){
            Date date = new Date(System.currentTimeMillis());
            try {
                Thread.sleep(1000);
                System.out.println(new SimpleDateFormat("HH:mm:ss").format(date));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new SleepThread()).start();
    }
}

模拟倒计时

/**
 * @author : LeeGaki
 * @date : 2022/6/4 10:05
 * 面向面试编程 --> 李佳琪
 */
public class DownTime {

    public static void main(String[] args) {
        downTime(100);
    }
    public static void downTime(int m){
        while(true){
            if (m==0){
                break;
            }
            try {
                Thread.sleep(1000);
                System.out.println("还剩下"+m--+"秒");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

线程的礼让

也不是真正的礼让,两个进程过来cpu选择了A线程,然后A线程礼让

就会退出执行A线程从AB中重新选择,再选到谁,还是看cpu心情。 

/**
 * @author : LeeGaki
 * @date : 2022/6/4 10:10
 * 面向面试编程 --> 李佳琪
 */
public class ThreadYield implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"执行了");
        //线程礼让
        Thread.yield();
        System.out.println(Thread.currentThread().getName()+"结束了");
    }

    public static void main(String[] args) {
        new Thread(new ThreadYield(),"线程1").start();
        new Thread(new ThreadYield(),"线程2").start();
    }
}

线程的插队

用join方法,别人都要等执行join方法的线程执行完才能继续。

线程的状态

 

 线程的优先级

 

线程的守护

gc是垃圾回收线程 为守护线程。

thread.setDaemon(true)开启守护线程。

默认false为用户线程,正常都是用户线程。

用户线程执行完毕,虚拟机不管守护线程完没完都停止。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeeGaKi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值