JavaEE 初阶(4)—— 多线程2之实现多线程

  线程  本身是 操作系统 提供的概念,且 操作系统提供 API 供程序员调用。不同的系统,提供的 API 是不同的(Windows 创建线程的 API 和  Linux 差别非常大...)
  Java (JVM) 把这些系统 API 封装好了,不需要关注系统原生 API, 只需要了解好 Java 提供的这一套 API就行了 --> Thread 标准库

一. 线程的创建

1.通过继承Thread类
class MyThread extends Thread{
    @Override
    public void run(){
        //这里写的代码,就是即将创建出的线程,要执行的逻辑
        while(true){
            System.out.println("hello thread");
            //循环中,加上 休眠 操作,让循环每执行一次,都休息一会儿,避免 CPU 消耗过大
            try {
                Thread.sleep(1000);//sleep是Thread中的类方法,static修饰
            } catch (InterruptedException e) {
                //throw new RuntimeException(e);//抛出新的异常,且打印异常信息

                e.printStackTrace();//只是打印异常信息

                //实际开发中处理异常的方法有很多,不只上面两种

            }
        }

    }
}
public class Main1 {
    //调用main方法的线程称为主线程  一个进程至少一个线程-->主线程
    public static void main(String[] args) {
        //创建一个线程对象
        MyThread t = new MyThread();
        //创建并启动线程,执行run里面的代码
        t.start();

        //t.run()不会创建线程,依旧是在主线程中执行逻辑

        //主线程
        while(true){
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果:

结果解析: 多个线程之间,谁先去CPU上调度执行,这个过程是“不确定的”(不是数学意义的随机),这个调度顺序,取决于 操作系统 内核里的 “调度器”。调度器里有一套规则,但是作为应用程序的开发者 是感受不到的,也没法进行干预。决定调度执行哪一个线程的过程,是一个“抢占式执行” 的过程。


我们可以通过Java jdk 中的 bin包 下的 jconsole 查看线程情况。 

堆栈跟踪 是一个程序在运行时生成的诊断信息,它显示了程序执行到当前点时,调用栈上所有活动的帧(Frame)。每个帧代表一个方法调用,堆栈跟踪能够展示哪些方法被调用,以及调用它们的顺序。当异常发生时,堆栈跟踪尤其有用,因为它可以帮助开发者追踪异常的来源,即确定异常是在哪个方法中首次被抛出的。 

除了手动创建的线程和主线程, 剩下的线程,都是起到了一些辅助作用:a. 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值