首页 > 系统相关 >进程和线程的区别;线程的多种创建方式;Thread 类及常见方法;线程的状态

进程和线程的区别;线程的多种创建方式;Thread 类及常见方法;线程的状态

时间:2024-09-25 21:50:15浏览次数:3  
标签:run Thread 创建 匿名 线程 子类 类及

文章目录

进程和线程的区别

  1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位。
  2. 进程包含一个或者多个线程。
  3. 进程有自己的内存地址空间(进程与进程间具有独立性),线程只独享指令流执行的必要资源,如寄存器和栈。
  4. 由于同一进程的各线程间共享内存和文件资源(共用同一份资源,省去了申请资源的开销),可以不通过内核进行直接通信。
  5. 线程的创建、切换及终止效率更高。(创建线程比创建进程更快、销毁线程比销毁进程更快、 调度线程比调度进程更快)(线程更轻量、高效)

设想如下场景:
一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。
如果一个人就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。此时,就把这种情况称为多线程,将一个大任务分解成不同小任务,交给不同执行流分别排队执行。
每个客户来银行办理各自的业务,但他们之间的票据肯定是不想让别人知道的,而上面我们的公司业务中虽然是
不同的执行流,但因为办理的都是一家公司的业务,所以票据是共享着的。这个就是多线程和多
进程的最大区别。

线程的创建方式

继承Thread,重写run(创建单独的类/匿名内部类)

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
// 使用匿名类创建 Thread 子类对象
Thread t1 = new Thread() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Thread 子类对象");
   }
};

实现Runnable,重写run(创建单独的类/匿名内部类)

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
// 使用匿名类创建 Runnable 子类对象
Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Runnable 子类对象");
   }
});

实现Callable,重写call(创建单独的类/匿名内部类)

使用lambda表达式

// 使用 lambda 表达式创建 Runnable 子类对象
Thread t3 = new Thread(() -> System.out.println("使用匿名类创建 Thread 子类对象"));
Thread t4 = new Thread(() -> {
    System.out.println("使用匿名类创建 Thread 子类对象");
});

ThreadFactory线程工厂

线程池

Thread 类及常见方法

线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使
用(例如 Linux 的 pthread 库).
Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.

Thread 的常见属性

在这里插入图片描述

启动一个线程-start()

调用 start() 方法,线程才真正独立去执行了。

等待一个线程-join()

线程的状态

NEW: 安排了工作, 还未开始行动
RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
BLOCKED
WAITING
TIMED_WAITING: (简单来说)都表示排队等着其他事情
TERMINATED: 工作完成了.

在这里插入图片描述

标签:run,Thread,创建,匿名,线程,子类,类及
From: https://blog.csdn.net/2301_80381519/article/details/142521708

相关文章

  • Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系?
    Thread,ThreadLocal,ThreadLocalMap,Entry之间的关系?首先ThradLocal是线程的本地副本,怎么理解这句话呢?一个Thread都有一个它自己的ThreadLocalMap。ThreadLocalMap不是HashMap的结构,而是一个Entry数组,里面存放了一个一个的Entry。而Entry中存放的就是key和value,这个......
  • Redis6 多线程模型
    优质博文:IT-BLOG-CN一、单线程的优缺点对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非常快。优点&缺点:【1】优点:不存在锁的竞争问题和......
  • 银行存取款多线程
    importjava.util.Random;importjava.lang.*;/***银行存取款**@authorLaccoliths*/publicclassBank{privateintcount=0;/***存钱*@parammoney:存钱数*/publicsynchronizedvoidaddMoney(intmoney){count+......
  • 【线程】POSIX信号量---基于环形队列的生产消费者模型
    信号量概念这篇文章是以前写的,里面讲了 SystemV的信号量的概念,POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但POSIX可以用于线程间同步。信号量的概念POSIX信号量的接口初始化信号量参数:pshared:0表示线程间共享,非0表示进程......
  • Linux 基础入门操作 第十章 多线程实现
    10线程介绍线程是进程的一条执行路径。每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间......
  • java-重启异常断掉的线程和监控线程状态
    java-重启异常断掉的线程和监控线程状态背景主要代码打印结果总结背景有一个线程,可能会因为异常而终止掉。为了监控这个线程,我又启动一个线程去监控。主要代码代码主要是由两个线程和两个可以产生异常的方法,内容跟简单,如下importjava.time.LocalDateTime;impor......
  • JMeter各种线程组
    Jmeter线程组之bzm-ConcurrencyThreadGroup(递增式并发线程组)-CSDN博客Jmeter线程组之bzm-Free-FormArrivalsThreadGroup_jmeterbzm线程组-CSDN博客Jmeter线程组之jp@gc-SteppingThreadGroup(deprecated)_jmetersteppingthreadgroup(deprecated)-CSDN博客......
  • Java 性能调优:调整 GC 线程以获得最佳结果
        垃圾回收(GC)在Java的内存管理中起着重要作用。它有助于回收不再使用的内存。垃圾回收器使用自己的线程集来回收内存。这些线程称为GC线程。有时,JVM最终可能会有太多或太少的GC线程。在这篇文章中,我们将讨论为什么JVM最终会拥有太多/太少的GC线程,它的后果,以及解......
  • 【JUC并发编程系列】深入理解Java并发机制:线程局部变量的奥秘与最佳实践(五、ThreadLo
    文章目录【JUC并发编程系列】深入理解Java并发机制:线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)1.基本API介绍2.简单用法3.应用场景4.Threadlocal与Synchronized区别5.内存溢出和内存泄漏5.2内存溢出(MemoryOverflow)5.2内存泄漏(Mem......
  • 线程池
    1)线程池PoolThread线程池可以避免在处理短时间任务时创建与销毁线程的代价,它维护着多个线程,等待着监督管理者分配可并发执行的任务,从而提高了整体性能2)单例类staticThreadPool&instance(){//局部静态变量,单例类只构造一次staticThreadPoolins;retur......