线程2 多线程

多线程就一定好吗?创建线程也是需要时间的

Thread.sleep() TimeUnt.*.sleep() 休眠 线程主动让出CPU 就绪——阻塞

Thread.yield 线程从运行到就绪 让出CPUe 

线程是OS调度的单位 也是os分配CPC资源的单位

也是我们抢夺CPU的工具

线程的控制之通知线程停止:

A叫B干活 一些突发情况发生了 需要让B停止工作

方法一 直接kill stop()

法二:和B协商 A给B发出一个信号 让B停止 interrupt()

设了一个停止标志 实际上不会影响B的运行

 

 使用多线程的场景:

1计算密集型任务时,需要提升速度 就要使用多线程

2当一个执行流阻塞 为了执行其他任务 可以引入多线程 

import java.util.Scanner;

public class Main {
    static long fib(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }

        return fib(n - 1) + fib(n - 2);
    }

    // 没有引入线程时
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入一个数字: ");
            int n = scanner.nextInt();

            long r = fib(n);
            System.out.printf("fib(%d) = %d\n", n, r);
        }
    }

    // 引入一个线程来进行计算,主线程只负责读取用户输入
    static class CalcFib extends Thread {
        private final int n;

        public CalcFib(int n) {
            this.n = n;
        }

        @Override
        public void run() {
            long r = fib(n);
            System.out.printf("fib(%d) = %d\n", n, r);
        }
    }

    // 开个饭店,如果只有一个人:既当前台 + 也当厨师。如果用户点了耗时比较久的菜(把我占用了),导致没法接待新顾客
    // 有了线程之后,“我”只负责前台工作,做菜交给另一个人,即使做菜比较慢,也不影响其他用户的体验
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入一个数字: ");
            int n = scanner.nextInt();
            // 读取输入后,创建一个线程去计算
            Thread t = new CalcFib(n);
            t.start();
            // 主线程直接读取下一个输入
        }
    }
}

线程知识小结:

代表一个独立的执行流 属于某个进程 OS的基本调度(分配CPU资源)单位

1提升效率 2阻塞的场景

线程在java中的表示+属性+常见方法

1                Thread对象 +Runnable对象的理解

2id name 优先级 状态 后台线程

3 启动操作 停止 等待停止

4休眠 让出CPU

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是香橙啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值