java多线程 从入门到出家

啥是线程

线程是比进程小的一个单位,负责当前进程中程序的执行,一个进程执行的时候可能会有多个线程

Thread 的几个状态

new: 当一个Thread 被new 出来的时候 就是新建的状态
runable: 可运行状态, 也叫就绪状态 这个是在执行了 start() 之后 现在就在等待cpu 调度了 这个时候是没有执行run 方法的
runing: 运行状态 这个时候是获得了cpu 的资源 执行run 方法
block : 阻塞状态 这个阻塞状态 可分为
永久阻塞状态 这个时候 是要别的线程唤醒才可以 一般是执行 sleep() 没有指定时间 或者 yield() 没有指定时间
定时阻塞状态 这个时候是有时间的阻塞 一版是制定了时间的 结束之后到达 可运行状态
dead : 死亡状态 这个线程到这里就结束了

什么是 Excutor
线程的创建和销毁是很耗时的 Thread 就是这样 这个时候就可以放在这个里面 交给这个管理
比较有名的实现 ExcutorService 这个接口
ThreadPoolExecutor 和这个实现 这个是 线程池执行器 是多线程并发的重要

ThreadPoolExecutor
数据结构
ctl 原子性状态值 前三位标识状态 后面标识多少个活动线程(低29位的值)
works 一个工作集合 将没有执行的放进去
mainLock 全局锁 关闭 和添加进works 需要这个锁

public ThreadPoolExecutor(int corePoolSize, --核心线程数
int maximumPoolSize, – 最大线程数
long keepAliveTime, – 存活时间
TimeUnit unit, – 上面过期时间的单位
BlockingQueue workQueue, – 工作集合 将没有执行的放进去
ThreadFactory threadFactory, – 线程工厂 默认设置非守护线程
RejectedExecutionHandler handler – 拒绝策略
) {
}

#啥是多线程,多线程有啥用
多线程是从软件的角度上面实现多个线程同时存在 同时运行的, 多线程就是为了解决 cpu的和磁盘或者io 速度不一致的问题
(在io或者磁盘读取的时候cpu空闲的问题),
#线程池的作用
上面说的都是讲线程创建出来 当线程一多了 管理起来就不方便了 每个线程的创建和消耗都是比较消耗资源的 当一个任务过来了
不需要创建线程 立刻就执行了

实现线程的几种方式:
实现 Runable 接口 执行 run 没有返回值
Callable 接口 submit 有返回值

#线程池的创建
1. Executors.newFixedThreadPool
2. Executors.newSingleThreadExecutor
3. Executors.newScheduledThreadPool
4. Executors.newCachedThreadPool

为什么redis 不用多线程?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值