JavaSE-多线程

线程Thread:

任务:做的事情  多任务:同时做很多事情
多线程:计算机同时做很多事情  
并发控制:对同一份资源的操作 资源抢夺问题
主线程:只有一条执行路径  效率低
多线程:多条执行路径 主线程和子线程并行交替执行 效率高
CPU调度和执行的单位
独立执行的路径
线程分为守护线程和用户线程

进程Process:

程序执行的过程
计算机中运行的程序就是进程 例如 QQ 游戏
进程中可以有多个线程 例如 声音 图片 弹幕 至少有一个线程

线程实现的三种方式:

第一种实现方式:
	继承Thread类:
		重写run方法,执行这个线程
		main方法:主线程
		调用start()方法开启新线程 ,与主线程同时运行
		Thread类: 本身实现Runnable接口
		线程开启不一定立即执行由CPU调度
		
第二种实现方式(推荐使用):
	实现Runnable接口:
		重写run方法,执行这个线程
		创建线程对象  调用start()方法启动线程		
		将Runnable接口的实现类对象丢入线程对象(代理)
		静态代理
		
第三种实现方式(不常用):
	实现Callable接口:
		重写call方法 需要返回值
		创建执行服务 创建线程池
		提交执行 传入Callable的实现类对象
		获取结果
		关闭服务
		好处可以定义返回值  抛出异常

线程的五个状态:

创建状态 启动线程进入 就绪状态 获得CPU资源进入 运行状态 
线程自然执行完毕或者外部干涉终止线程进入 死亡状态
 一旦死亡不能启动
当运行状态等待用户输入或者休眠时进入 阻塞状态 
阻塞解除回到就绪状态
运行状态释放CPU资源回到就绪状态	

线程推荐自然结束或者设置标志位编写停止代码改变标志 
睡眠sleep用于网络延时倒计时 
每个对象都由一个锁,sleep不会释放锁	
线程礼让:yield 线程回到就绪状态 重新抢夺CPU
线程强制执行:join 其他线程阻塞
线程优先级1-10 主线程默认是5 
Deamon默认是false表示是用户线程 true表示是守护线程
虚拟机必须确保用户线程执行完毕
虚拟机不用等待守护线程执行完毕

线程同步synchronized:

多个线程操作同一个资源:并发
排队:队列
锁:当一个线程获得对象的排它锁 独占资源 其他线程必须等待
控制对象或方法访问的关键字synchronizad
synchronizad(obj){代码块}
CopyOnwriteArrayList线程安全的数组

线程通信:

生产者消费者问题

线程不安全(并发问题):

多个线程同时操作一个资源
死锁:
		一个同步代码块同时拥有两个以上对象的锁
		都在等待对方释放资源 都停止执行
Lock锁 JVM花费更少时间调度线程 性能更好:
		JDK5.0开始 的 显示同步锁手动开关
		synchronized隐式自动
		ReentrantLock可重用锁类实现了Lock

静态代理:

通过传入目标(真实)对象进代理对象 帮助完成一些事情
真实对象和目标对象实现同一个接口
代理对象代理真实角色
代理对象创建时传入真实对象 执行方法时调用真实对象的方法
代理对象可以完成真实对象不能完成的事情
真实对象专注于自己的方法

Lambda表达式:

避免内部类定义过多
函数式编程
(参数)->{语句}
匿名内部类:只用一次的
函数式接口:一个接口里面只有一个抽象方法
(Lambda表达式的前提)
通过Lambda表达式创建函数式接口对象
外部类->静态内部类->局部内部类->匿名内部类(没有类名)
->JDK1.8 lambda
参数->语句

线程池~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值