java多线程介绍

什么是进程,什么是线程?

任何一个程序的运行都是一个进程,进程是由一个或者多个线程组成。线程是进程的最小单位。
例如一个公司就是个进程,公司里的员工就是这个进程里的线程。

线程并发: 这个公司只有一个厕所,早上大家都同时来蹲坑,这就产生了并发。(对公共资源的同时操作

线程安全: 经常用来描述一段代码在并发的情况下线程的调度顺序不影响任何结果。

线程同步: 通过人为的控制和调度保证共享资源的多线程访问成为线程安全。

锁: 某一个人抢到了这个坑,把门锁了上,其它人进不去,这就叫线程锁。(避免同时对公共资源操作产生数据错误,在某一个线程抢到公共资源就对其进行上锁,其它线程就需要等待)

synchronized: java线程的同步锁. 被synchronized修饰的代码多线程访问时,会被阻塞.

synchronized和volatile区别
volatile 只保存了内存的可见性
synchronized 既保存了操作的原子性,又保证了内存的可见性

多线程的内存模式: main memory(主存),working memory(本地栈)。在处理时会把主存load到本地栈,完成操作后save回去。

线程的创建: 继承Thread类,实现Runnable接口。

run()和start()区别: run()没有启新线程(主线程按同步执行),start()方法才会调Thread的native的start0()。

线程池: 首先创建一些线程,它们的集合称为线程池。-- 线程池很好的提高性能,线程池会在系统启动的时候创建大量的空闲线程。当程序将一个任务传给线程池时,线程池就会启动一条来执行这个任务。任务执行完成再次返回线程池成为空闲状态。java自带线程池java.util.concurrent包Executors.java,Spring自带的线程池org.springframework.scheduling.concurrent包下的ThreadPoolTaskExecutor

线程的几种状态(Thread.State):

  • NEW 创建而未启动
  • RUNNABLE
    READY 表示可以被jvm调度器进行调度
    RUNNING 线程正在运行
  • BLOCKED 一个线程发起一个阻塞,相应的线程处于该状态
  • WAITING 一个线程执行了某些方法调用后就会处于这种无限等待其他线程执行特定操作的状态
  • TIMED_WAITING 和WAITING类似,该状态并非无线等待,而是处于有限时间等待
  • TERMINATED 已经执行结束的线程
    在这里插入图片描述

在多线程环境中状态由RUNNABLE转换为非RUNNABLE状态时相应的上线文信息会被保存——占用内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值