当前位置: 首页 > news >正文

Java多线程-初阶1

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

关注博主带你了解更多数据结构知识


1. 认识线程(Thread)

1.线程是什么

⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏ 着多份代码

2. 为啥要有线程

通过写特殊的代码,把多个cpu核心,都能利用起来,这样的代码就叫并发编程.

多进程编程就是一种典型的并发编程.

虽然多进程能够解决问题,但随着对效率的要求越来越高,就希望出现更好的方式来实现并发编程.

多进程的缺点就是太"重".

创建进程,销毁进程(最典型就是服务器开发),开销都比较大(时间,空间).

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

创建线程⽐创建进程更快.

• 销毁线程⽐销毁进程更快.

• 调度线程⽐调度进程更快

线程虽然⽐进程轻量, 但是⼈们还不满⾜, 于是⼜有了 "线程池"(ThreadPool) 和 "协程" (Coroutine)

3.进程和线程的区别

进程是包含线程的. 每个进程⾄少有⼀个线程存在,即主线程。

进程和进程之间不共享内存空间. 同⼀个进程的线程之间共享同⼀个内存空间.

进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位

⼀个进程挂了⼀般不会影响到其他进程. 但是⼀个线程挂了, 可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).

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

线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对⽤⼾层提供了⼀些 API 供⽤⼾ 使⽤(例如 Linux 的 pthread 库).

Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进⾏了进⼀步的抽象和封装.

5. 创建线程 

⽅法1 继承 Thread 类

继承 Thread 来创建⼀个线程类.

class MyThread extends Thread{@Overridepublic void run() {//这里就是即将创建线程,要执行的逻辑System.out.println("hello,Thread!");}
}
public class Demo1 {public static void main(String[] args) {MyThread t = new MyThread();//创建线程t.start();}
}

 创建 MyThread 类的实例

MyThread t = new MyThread();

调⽤ start ⽅法启动线程 

t.start();

⽅法2 实现 Runnable 接⼝ 

实现 Runnable 接⼝

class MyRunnable implements Runnable{@Overridepublic void run() {System.out.println("hello Runnable!");}
}
public class Demo2 {public static void main(String[] args) {MyRunnable runnable = new MyRunnable();Thread t = new Thread(runnable);t.start();}
}

创建 Thread 类实例, 调⽤ Thread 的构造⽅法时将 Runnable对象作为 Thread 参数.

 Thread t = new Thread(runnable);

调⽤ start ⽅法

 t.start();

其他变形 

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

public class Demo3 {public static void main(String[] args) {Thread t = new Thread(){@Overridepublic void run() {while (true){System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};t.start();}
}

http://www.lryc.cn/news/364995.html

相关文章:

  • C++二级指针的指向与解引用
  • Pandas处理时间差的4种表达方式
  • C语言---指针part2
  • DNS域名
  • 19 - 查询结果的质量和占比(高频 SQL 50 题基础版)
  • 一次挖矿病毒的排查过程
  • 【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】
  • ultralytics solutions快速解决方案,快速实现某些场景的图像解决方案
  • iphone突然黑屏?3种方法解决问题!
  • nn.GRU和nn.GRUCell区别
  • Coolmuster Android助手评测:简化Android到电脑的联系人传输
  • 【杂记-webshell恶意脚本木马】
  • 锻炼 精读笔记 01
  • 基于pytorch的车牌识别
  • 红酒:如何避免红酒过度氧化
  • FreeRTOS学习笔记-基于stm32(9)信号量总结(二值信号量、计数型信号量、互斥信号量、优先级翻转、优先级继承)
  • 归并排序——二路归并排序
  • java-StringBuilder
  • 数据结构 | 超详细讲解七大排序(C语言实现,含动图,多方法!)
  • 企业自建邮件系统的优势,安全性更高,功能更灵活,维护更便捷
  • Softing工业助力微软解锁工业数据,推动AI技术在工业领域的发展
  • 企微自动化机器人的应用与前景
  • 从零开始:如何用Electron将chatgpt-plus.top 打包成EXE文件
  • 基于RNN和Transformer的词级语言建模 代码分析 log_softmax
  • Python爬虫要掌握哪些东西
  • FPGA-ARM架构与分类
  • docker网络详解
  • 设计软件有哪些?效果工具篇(1),渲染100邀请码1a12
  • Iphone自动化指令每隔固定天数打开闹钟关闭闹钟(二)
  • 计算机网络错题答案汇总