java 多线程

本文介绍了Java中的多线程概念,包括线程池的使用、四种常见的线程池实现,以及锁类型和临界资源的管理。多线程的实现方式有继承Thread类和实现Runnable接口,线程的生命周期包括新建、启动、运行和消亡。线程池能有效管理和复用线程,减少系统资源消耗。文章还讨论了线程同步和数据安全问题,如synchronized关键字的使用,以及互斥锁和信号量的概念。此外,提到了临界资源和死锁现象。
摘要由CSDN通过智能技术生成

概念:
线程 依赖于进程 使用cpu的基本单位
进程:就是正在进行的程序
多进程:
同一段时间 执行多个进程
多线程:
同一个进程中,有多个线程共享进程的资源 (堆,方法区)栈独立
线程调度模型 jvm抢占式 ,优先级高的进程先执行 如果优先级相同那么 随机执行
jvm 支持 多线程
一个程序至少包括两个线程:主线程 和垃圾回收器
多线程的实现方式 有两种

  1. 子类继承Thread 重写Run方法,创建子类对象,启动线程
  2. 写一个子类实现Runable接口,创建子类对象,创建Thread对象 传入Runable子类对象

线程的生命周期:
新建 –>启动-运行消亡
新建:参照线程新建的两种方式
启动:调用 继承自Thread的start方方法在这里插入图片描述
串行:
相对于单条线程执行多个任务来说的,举个例子,当我们下载东西的时候,在串行中他是按照一定的顺序去进行下载的,也就是说必须等a下载完成之后才能开始下载b他们在时间上是无法发生重叠的
并行:
下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格一意义上的,在同一时刻发生的,并且在时间上是重叠的。
守护线程:
就是当被守护线程执行结束那么就可以结束程序的运行守护线程不一定会执行完毕 但是被守护线程一定会执行完毕 thread.setDeamon可以将该对象线程转换成守护线程

继承了Thread类和实现了Runable接口 的类实例化之后就可以调用线程的方法
当多个线程要共享数据的时候(例如买票)我们有以下几种方式

  1. 以第一种方式创建的多线程(类继承Thread重写run()方法的形式) 这样 因为new出来的线程对象指向的是各自的对象并没有共享数据 因此只能通过将数据设置成静态的形式来实现共享

  2. 以第二种方式创建的对象(类实现Runnable接口 然后实例化Thread类并且传入参数的方式)这样新建的线程是指向堆里的同一个对象因此数据本身就是共享的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值