线程和进程的关系
线程寄生在进程中。一个进程中可以有多个线程。
进程本质上是一个执行的程序。
线程是多任务处理的最小单位。
多线程比多进程消耗更少的资源。
定义
在单个程序中同时执行多个不同的任务。多线程的目的是为了最大限度的利用cpu资源。
当程序运行时,会自动产生一个主线程,main方法就在这个主线程中运行。
运行流程
如图:
sleep() 睡眠
join() 加入启动它的线程,让异步变同步
yield()让出,让给相同优先级的其他线程执行
notify():
notify(),通知其他线程使用cpu资源,一般写在线程执行完后。 (必须在synchronized块或方法中)
notify(),wait(),synchronized 是一个组合。他们一定是配合使用的,来进行线程间交互。
sleep和wait的区别:
sleep不释放对象锁(占着cup资源的茅坑不拉屎,睡觉去了)
wait 释放对象锁(交出cup资源, monitor锁资源,进入等待池)
wait 使用时线程必须有对象锁。(必须在synchronized块或方法中)
synchronized 的几种场景:
1. 对象中的同步方法 锁是对象本身。
2. 静态的同步方法:锁是方法所在的类class对象。
生产者消费者模型。
如何做并发加法:
atomic 系列 操作。
AtomicLong
AtomicLong
AtomicInteger
incrementAndGet() decrementAndGet()
java8 并发加法器
LongAdder
DoubleAdder
Android N之后支持java 8