• 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 来创建⼀个线程类.

    1. class MyThread extends Thread{
    2. @Override
    3. public void run() {
    4. //这里就是即将创建线程,要执行的逻辑
    5. System.out.println("hello,Thread!");
    6. }
    7. }
    8. public class Demo1 {
    9. public static void main(String[] args) {
    10. MyThread t = new MyThread();
    11. //创建线程
    12. t.start();
    13. }
    14. }

     创建 MyThread 类的实例

    MyThread t = new MyThread();

    调⽤ start ⽅法启动线程 

    t.start();

    ⽅法2 实现 Runnable 接⼝ 

    实现 Runnable 接⼝

    1. class MyRunnable implements Runnable{
    2. @Override
    3. public void run() {
    4. System.out.println("hello Runnable!");
    5. }
    6. }
    7. public class Demo2 {
    8. public static void main(String[] args) {
    9. MyRunnable runnable = new MyRunnable();
    10. Thread t = new Thread(runnable);
    11. t.start();
    12. }
    13. }

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

     Thread t = new Thread(runnable);

    调⽤ start ⽅法

     t.start();

    其他变形 

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

    1. public class Demo3 {
    2. public static void main(String[] args) {
    3. Thread t = new Thread(){
    4. @Override
    5. public void run() {
    6. while (true){
    7. System.out.println("hello Thread!");
    8. try {
    9. Thread.sleep(1000);
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. }
    15. };
    16. t.start();
    17. }
    18. }

  • 相关阅读:
    sklearn实现决策树,随机森林,逻辑回归,KNN,贝叶斯,SVM,以葡萄干数据集为例
    ES8 打印DSL
    JVM和字节码的关系
    三年轻量:腾讯云3年轻量2核2G4M服务器366上三年时长
    反向传播back propagation
    4. DDPM, DDIM, Analytic-DPM, Extended Analytic-DPM
    ECharts多个数据视图进行自适应大小的解决方案
    Bean的生命周期
    创建SpringBoot工程
    第十八章:Swing自述
  • 原文地址:https://blog.csdn.net/jj666mhhh/article/details/139493578