欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【Java EE初阶 ---多线程(初阶)】多线程的使用

【Java EE初阶 ---多线程(初阶)】多线程的使用

2025/2/24 22:19:02 来源:https://blog.csdn.net/optimistic_chen/article/details/143836174  浏览:    关键词:【Java EE初阶 ---多线程(初阶)】多线程的使用

乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen

我的专栏:c语言 ,Java

欢迎大家访问~
创作不易,大佬们点赞鼓励下吧~

文章目录

  • 前言
  • 认识线程
    • 为什么要有线程?
    • Java的线程 和 操作系统的线程的关系
  • 如何创建线程
    • 继承 Thread 类创建线程
    • 实现Runnable接口创建线程
    • 匿名内部类创建线程
  • 完结

前言

上篇博客,大概说明了计算机的历史和进程这一概念,初步对计算机的组成和运行有一定了解。这篇博客将正式进入对多线程的学习,希望对大家有所帮助~ ~ ~

认识线程

线程它和进程有什么关系吗?仅仅是一字之差吗?

线程的概念⼀个线程就是⼀个"执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码.多个线程之间"同时"执⾏着多份代码.
相当于一个大任务被分解为多个小任务,其中分别完成各个小任务的人就是线程。他们都是为了完成同一个大任务去努力,这种情况就是多线程!

当然不是,首先进程是包含线程的,每个进程都至少有一个线程存在,即主线程其次进程和进程之间不共享内存空间,但是同一个进程的线程之间共享一个内存空间

在这里插入图片描述

总结:
· 进程是系统资源分配的最小单位,线程是系统调度的最小单位
· ⼀个进程挂了⼀般不会影响到其他进程. 但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整个进程崩溃)

为什么要有线程?

因为随着计算机被要求处理的计算越来越多且复杂,计算机不断发展尽力提高算力。众所周知,计算机的核心是CPU,但是单核CPU发展到了瓶颈,于是多核CPU就横空出世。为了更好的利用多核优势,有大佬就提出了 “ 并发 ” 概念。
目前," 并发编程 “成为” 刚需 ",从某种角度来讲,并发编程大大提高了计算机运行的效率。
对于并发的理解大家可以去看上篇博客有详细说明。

虽然多进程也能实现并发编程,但是线程⽐进程更轻量.

• 创建线程 ⽐ 创建进程 更快.
• 销毁线程 ⽐ 销毁进程 更快.
• 调度线程 ⽐ 调度进程 更快.

当然,也有更高效的方法,我们以后再说…

Java的线程 和 操作系统的线程的关系

明确一个点,线程是操作系统中的概念

操作系统内核实现了线程这样的机制,并且对⽤⼾层提供了⼀些 API 供⽤⼾使⽤
Java标准库中 Thread 类可以视为是对操作系统提供的 API 进⾏了进⼀步的抽象和封装。
简单理解,操作系统把它内部的一个方法拿出来当作接口,去给其他用户使用,而Java中就对于把这个接口拿过来使用这个方法,并且做了一些改变。
大家如果对 API 这个概念不清楚,把它当作一个接口就行,如果需要更专业的理解,可以看看这篇博客什么是API?

如何创建线程

继承 Thread 类创建线程

继承Thread ,重写run

class MyThread extends Thread{//相当于线程的入口@Overridepublic void run() {while (true) {System.out.println("hello thread");//通过类名调用, 是静态方法try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}public class Demo1 {public static void main(String[] args) {Thread t = new MyThread();//真正在系统中创建出一个线程t.start();//相当于多了一个执行流,可以一心两用while(true){System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

sleep是静态方法,让CPU休眠,时间到了之后再运行,同时去处理异常

实现Runnable接口创建线程

使用Runnable接口,重写run

class MyRunnable implements Runnable{@Overridepublic void run() {while(true){System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}
public class Demo2 {public static void main(String[] args) throws InterruptedException {//好处是:高内聚,低耦合Runnable runnable=new MyRunnable();//创建 Thread 类实例,调⽤ Thread 的构造⽅法时将 Runnable 对象作为目标参数.Thread t=new Thread(runnable);//给Thread传参数进去t.start();//主线程while(true){System.out.println("hello main");Thread.sleep(1000);}}
}

匿名内部类创建线程

Java中方法必须基于类来存在,使用匿名内部类就可以少定义一些类了。

匿名内部类创建 Thread ⼦类对象

public class demo3 {public static void main(String[] args) {//匿名内部类Thread t=new Thread(){//属性private int n;//方法重写@Overridepublic void run(){while(true){System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};t.start();while(true){System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

匿名内部类创建 Runnable ⼦类对象

public class Demo4 {public static void main(String[] args) throws InterruptedException {//使用Runnable,任务和线程概念是分离的Runnable runnable=new Runnable(){@Overridepublic void run() {while(true){System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};Thread t=new Thread(runnable);//创建Thread实例t.start();while(true){System.out.println("hello main");Thread.sleep(1000);}}
}

lambda 表达式创建 Thread ⼦类对象(函数式接口)

public class Demo5 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{while(true){System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}) ;t.start();while(true){System.out.println("hello main");Thread.sleep(1000);}}
}

完结

如果这个系列博客对你有帮助的话,可以点一个免费的赞并收藏起来哟~
可以点点关注,避免找不到我~ ,我的主页:optimistic_chen
我们下期不见不散 ~ ~ ~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词