首页 > 其他分享 >线程

线程

时间:2024-03-04 21:35:57浏览次数:21  
标签:状态 Runnable run Thread 线程 方法

线程的四种创建方式

  1. 定义一个类继承Thread类,并重写Thread类的run()方法
  2. 定义Runnable接口的实现类,重写run()方法
  3. 实现callback接口
  4. 通过线程池创建

四种创建方式对比

  1. 采用继承Thread类方式:
  • 优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
  • 缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
  1. 采用实现Runnable接口方式:
  • 优点:线程类只是实现了Runable接口,还可以继承其他的类。
  • 缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法
  1. Runnable和Callable的区别:
  • Callable规定的方法是call(),Runnable规定的方法是run().
  • Callable的任务执行后可返回值,而Runnable的任务是没有返回值的
  • call方法可以抛出异常,run方法不可以,因为run方法本身没有抛出异常,所以自定义的线程类在重写run的时候也无法抛出异常
  1. 线程池:
  • 前三种的线程如果创建关闭频繁会消耗系统资源影响性能,而使用线程池可以不用线程的时候放回线程池,用的时候再从线程池取,项目开发中主要使用线程池
  • start()方法用来,开启线程,但是线程开启后并没有立即执行,他需要获取cpu的执行权才可以执行
  • run()方法是由jvm创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)

线程的核心参数

  1. corePoolSize 线程池核心线程大小
  2. maximumPoolSize 线程池最大线程数量
  3. keepAliveTime 空闲线程存活时间
  4. unit 空闲线程存活时间单位
  5. workQueue 工作队列
  6. threadFactory 线程工厂
  7. handler 拒绝策略

线程状态

  1. NEW: 新建状态,线程还没有启动
  2. RUNNABLE: 可以运行状态,线程调用了start()方法后处于这个状态
  3. BLOCKED: 锁阻塞状态,没有获取到锁处于这个状态
  4. WAITING: 无限等待状态,线程执行时被调用了wait方法处于这个状态
  5. TIMED_WAITING: 计时等待状态,线程执行时被调用了sleep(毫秒)或者wait(毫秒)方法处于这个状态
  6. TERMINATED: 终止状态, 线程执行完毕或者遇到异常时,处于这个状态。
    要确定一个线程的当前状态,可调用getState方法

线程的生命周期

标签:状态,Runnable,run,Thread,线程,方法
From: https://www.cnblogs.com/hmxjc/p/18052741

相关文章

  • TransmittableThreadLocal 如何解决在分布式环境下线程池中使用ThreadLocal的问题
    在分布式环境下,线程池中使用ThreadLocal会出现线程安全问题,因为线程池中的线程是可以被多个请求共享的,当多个请求同时访问同一个ThreadLocal变量时,会出现数据互相干扰的问题。为了解决这个问题,Java提供了TransmittableThreadLocal类。TransmittableThreadLocal是ThreadLocal的一......
  • 多线程系列(十二) -生产者和消费者模型
    一、简介在Java多线程编程中,还有一个非常重要的设计模式,它就是:生产者和消费者模型。这种模型可以充分发挥cpu的多线程特性,通过一些平衡手段能有效的提升系统整体处理数据的速度,减轻系统负载,提高程序的效率和稳定性,同时实现模块之间的解耦。那什么是生产者和消费者模型呢?简......
  • 多线程系列(十一) -浅析并发读写锁StampedLock
    一、摘要在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问题:如果有线程正在读数据,写线程准备修改数据的时候,需要等待读线程释放锁后才能获取写锁,简单的说就是,读......
  • 精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式
     概述:该通用单例泛型基类使用C#实现,线程安全,通过泛型参数和Lazy<T>实现简化的单例模式。优点包括线程安全、泛型通用性、简化实现、以及延迟加载的特性。优点:线程安全: 使用Lazy<T>确保了线程安全的延迟初始化,避免了在多线程环境下可能导致的竞态条件问题。泛型通用性: 通......
  • 线程池
    线程池——治理线程的法宝1.线程池的自我介绍线程池的重要性什么是池软件中的“池”,可以理解为计划经济如果不使用线程池,每个任务都新开一个线程处理一个线程for循环创建线程当任务数量上升到1000这样的开销太大,我们希望有固定数量的线程,来执行这1000个线程......
  • python中的多线程及锁介绍
    线程CPU执行调度的最小单位。不能独立存在,依赖进程存在。一个进程至少有一个线程,叫做主线程,另外还有内核线程、用户线程。线程之间共享内存。线程之间的通信效率远高于进程间通信效率,线程之间切换代价也比进程小很多。适用场景Python的多线程适用于IO密集型任务。多任务可以......
  • 多线程限流工具类-Semaphore
    Semaphore介绍Semaphore(信号量)是JAVA多线程中的一个工具类,它可以通过指定参数来控制执行线程数量,一般用于限流访问某个资源时使用。Semaphore使用示例需求场景:用一个核心线程数为6,最大线程数为20的线程池执行任务,但是要求最多只能同时运行3个线程代码:publicclassdemo{......
  • C#多线程
    在C#编程中,多线程是实现高效并发编程的关键技术之一。通过创建多个线程,程序可以同时执行多个任务,从而充分利用多核处理器的计算能力。本文将带你快速回顾C#多线程的基础知识,通过10分钟的学习,你将能够掌握多线程的核心概念,并学会使用C#语言创建和管理线程。一、多线程基础概念在C......
  • 并发编程补充:基于多线程实现并发的套接字通信
    服务端:fromsocketimport*fromthreadingimportThreaddefcommunicate(conn):whileTrue:try:data=conn.recv(1024)ifnotdata:breakconn.send(data.upper())exceptConnectionResetError:......
  • 对于需要实时处理的代码语句 就用定时器中断模式,实现多线程模式,建议不要用查询模式。
    对于需要实时处理的代码语句就用定时器中断模式,实现多线程模式,建议不要用查询模式。 示例代码1:查看代码#include"delay.h"#include"sysInt.h"#include"intrins.h"charSMGDuan[]={0x5B,0x3F,0x5B,0x66, 0x40,0x40, 0x3F,0x3F}; //2024--MMcharsegDuan[]={0x3F,0......