Java第七章第1节:线程与JDBC 多线程编程

简介

👨‍💻个人主页@云边牧风
👨‍🎓小编介绍:欢迎来到云边牧风破烂的小星球🌝
📋专栏:Java基础知识
🔑本章内容:线程
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~

 本节多线程编程内容有:

7.1.1 线程的概念

7.1.2 Thread类与Runnable接口

7.1.3 线程的生命周期

多线程编程基础

多线程是指同一个程序同时存在几个“执行体”,它们可以“同时”工作

 在早期的单核CPU上,这些执行体是轮流执行的,因为计算机同一时刻只能执行一个线程,但是CPU执行速度是很快的,通过快速轮转,给人感觉上是“同时”工作的。

 现在的多核CPU上,可以实现真正的多线程并行执行。

1、啥是进程和线程?

搞清楚进程之前先看下边这张图👇:

引入操作系统与进程概念:

程序是静态的,进程是程序的一次动态执行

一个程序的每一次运行称为一个进程


例如:一边用Word一边听MP3,那么系统中会存在Word和播放器两个进程

一个进程要占用一部分处理器时间内存资源

线程是比进程更小的执行单位

2、线程

一个程序中 多段代码同时并发执行 ,称为 多线程

 通过多线程,一个进程可以同时执行一个以上的任务(称为“并发”)

 创建线程比创建进程开销要小得多,线程之间的协作和数据交换也比较容易

一个进程可以包含多个线程,它们共享进程资源

3、主线程

 每个Java应用程序都有一个缺省的主线程

JVM 加载代码,发现 main 方法之后,就会启动一个线程,这个线程就是“ 主线程

 主线程负责执行main方法,在main方法的执行中再创建的线程称为其他线程,JVM调度各线程轮流执行

说白了:在前面遇到的Java文件中,只有main是大佬,所有的类都要听他安排——这个main运行时,就相当于启动了一个线程,而main线程就是主线程

例如:

class Kitty {

    public void run()  {

        for (int i = 1; i <= 50000; i++)

            if(i % 10000 == 0)

                System.out.println("小喵猫猫叫~");  } 

}

class Puppy {

    public void run()  {

        for (int i = 1; i <= 50000; i++)

            if(i % 10000 == 0)

                System.out.println("狗狗汪汪叫~");  } 

}

这些都称之为:“其他线程

只有下面的

public static void main(String[] args) {

    Kitty k = new Kitty();

    Puppy p = new Puppy();

    k.run();

    p.run();

    for (int i = 1; i <= 50000; i++)

        if(i % 10000 == 0)

            System.out.println(

                 "主人嗷嗷喊~~~");

}

main才是主线程

运行结果为:

从上面的运行结果可以看出:代码是一块一块运行行(一行一行跑的),只有执行完上一步才能进行下一步,但在现实中往往会遇到需要交错运行的代码,那怎么办呢?

4、试试线程

将上面的代码改为:

class Kitty extends Thread{

    public void run()  {

        for (int i = 1; i <= 50000; i++)

            if(i % 10000 == 0)

                System.out.println("小喵猫猫叫~");  } 

}

class Puppy extends Thread{

    public void run()  {

        for (int i = 1; i <= 50000; i++)

            if(i % 10000 == 0)

                System.out.println("狗狗汪汪叫~");  } 

}

public static void main(String[] args) {

    Kitty k = new Kitty();

    Puppy p = new Puppy();

    k.start();

    p.start();

    for (int i = 1; i <= 50000; i++)

        if(i % 10000 == 0)

            System.out.println(

                 "主人嗷嗷喊~~~");

    }

//注意这里的extends Thread:Kitty和Puppy都继承了Thread类,我们看看运行结果有何不同:

我们发现这个运行已经不是一条一条跑了,而是有些是同时运行或者交叉运行了。这就是线程管的事了

 

那为什么会有这样的效果呢?这里就要看下一节(第七章第2节)Thread类与Runnable接口

结束语:

以上是Jav第七章第1节的全部内容 希望大家喜欢

下一节讲(第七章第2节)——Thread类与Runnable接口

喜欢的可以点赞+关注哈 ❤

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云边牧风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值