一:什么是进程?
1.正在运行的程序(软件)就是一个独立的进程。
2.线程是属于进程的,一个进程中可以同时运行很多个线程。
3.进程中的多个线程其实是并发和并行执行的。
二:并发与并行
1.并发:进程中的线程是由CPU负责调度执行的,但CPU能同时处理线程数量有限,为了保证全部线程都能往前执行,CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉这些线程在同时执行,这就是并发。
2.并行:在同一个时刻上,同时有多个线程在被CPU调度执行。
3.多线程到底是怎么在执行的?
并发与并行同时进行的!
三:线程的生命周期
1.也就是线程从生到死的过程中,经历的各种状态及状态转换。
2.理解线程这些状态有利于提升并发编程的理解能力
四:Java的线程状态
1.Java总共定义了6种状态
2.6种状态都定义在Thread类的内部枚举类中。
3.线程的6种状态互相转换
4.线程的6种状态总结
NEW(新建) 线程刚被创建,但是并未启动
Runnable(可运行) 线程已经调用了start(),等待CPU调度
Blocked(锁阻塞) 线程在执行的时候未竞争到锁对象,则该线程进入Blocked状态
Waiting(无限等待) 一个线程进入Waiting状态,另一个线程调用notify或者notifyAll方法才能够唤醒
Timed Waiting(计时等待) 同Waitin状态,有几个方法(sleep,wait)有超时参数,调用他们将进入Time Waiting状态
Teminated(被终止) 因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡
---------------------------------------------------------------------------------------------------------------------------------
一:悲观锁
1.一上来就加锁,没有安全感,每次只能一个线程进入访问完毕后,再解锁。线程安全,性能较差!
2.示例:
public class MyRunnabless implements Runnable{
private int count;
@Override
public void run() {
for (int i = 0; i < 100; i++) {
synchronized (this) {
System.out.println(Thread.currentThread().getName() + "count------->"+(++count));
}
}
}
}
二:乐观锁
1.一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。线程安全,性能较好!
2.示例:
import java.util.concurrent.atomic.AtomicInteger;
public class MyRunnabless implements Runnable{
//整数修改的乐观锁:原子类实现的
private AtomicInteger count = new AtomicInteger();
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "count------->"+count.incrementAndGet());
}
}
}