线程相关概念和线程的基本使用

举报
荞慧子 发表于 2022/12/31 19:45:23 2022/12/31
【摘要】 线程相关概念程序是为完成特定任务,用某种语言编写的一组指令的集合。简单地说就是我们写的代码。进程进程是程序的一次执行过程,或是正在运行的一个程序。是动态过程:有它自身的产生,存在和消亡的过程线程(1)线程是由进程创建的,是进程的一个实体(2)一个进程可以拥有多个线程其它相关概念单线程:同一个时刻,只允许执行一个线程多线程:同一个时刻,可以执行多个线程并发:同一个时刻,多个任务交替执行,造成一...

线程相关概念

程序

是为完成特定任务,用某种语言编写的一组指令的集合。简单地说就是我们写的代码。

进程

进程是程序的一次执行过程,或是正在运行的一个程序。是动态过程:有它自身的产生,存在和消亡的

过程

线程

(1)线程是由进程创建的,是进程的一个实体

(2)一个进程可以拥有多个线程

其它相关概念

单线程:同一个时刻,只允许执行一个线程

多线程:同一个时刻,可以执行多个线程

并发:同一个时刻,多个任务交替执行,造成一种“貌似同时”的错觉,简单的说,单核cpu实现的多任

务就是并发。

并行:同一个时刻,多个任务同时执行。多核cpu可以实现并行。

线程基本使用

创建线程的两种方式

(1)继承Thread类,重写run方法

(2)实现Runnable接口,重写run方法

线程应用案例——继承Thread类

(1)请编写程序,开启一个线程,该线程每隔一秒,在控制台输出“喵喵喵”

(2)对上题改进:当输出80次时“喵喵喵”时,结束该线程

(3)使用JConsole监控线程执行情况


public class Thread01 {
    public static void main(String[] args) throws InterruptedException {
        //创建 Cat 对象,可以当做线程使用
        Cat cat = new Cat();
        
        //源码
        /*
            (1)
            public synchronized void start() {
                start0();
            }
            (2)
            //start0() 是本地方法,是 JVM 调用, 底层是 c/c++实现
            //真正实现多线程的效果, 是 start0(), 而不是 run
            private native void start0();
        */
    
        cat.start();//启动线程-> 最终会执行 cat 的 run 方法
        //cat.run();
        //run 方法就是一个普通的方法, 没有真正的启动一个线程,就会把 run 方法执行完毕,才向下执行
        //说明: 当 main 线程启动一个子线程 Thread-0, 主线程不会阻塞, 会继续执行
        //这时 主线程和子线程是交替执行.. System.out.println("主线程继续执行" + Thread.currentThread().getName());//名字 main
        for(int i = 0; i < 60; i++) {
            System.out.println("主线程 i=" + i);
            //让主线程休眠
            Thread.sleep(1000);
        }
    }
}


//1. 当一个类继承了 Thread 类, 该类就可以当做线程使用
//2. 我们会重写 run 方法,写上自己的业务代码
//3. run Thread 类 实现了 Runnable 接口的 run 方法
/*
@Override
public void run() {
    if (target != null) {
        target.run();
    }
}

*/class Cat extends Thread {
    int times = 0;
    @Override
    public void run() {//重写 run 方法,写上自己的业务逻辑
        while (true) {
            //该线程每隔 1 秒。在控制台输出 “喵喵喵”
            System.out.println("喵喵喵" + (++times) + " 线程名=" + Thread.currentThread().getName());
            //让该线程休眠 1 秒 ctrl+alt+t
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(times == 80) {
                break;//当 times 到 80, 退出 while, 这时线程也就退出.. 
            }
        }
    }
}

线程应用案例——实现Runnable接口

说明:

(1)java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时再用继承Thread类方法来

创建线程显然不可能了。

(2)java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程。

应用案例:

请编写的程序,该程序可以每隔一秒,在控制台输出“hi!”,当输出10次后,自动退出。请使用实现

Runnable接口的方式实现。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。