进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,即“运行中的程序”。
线程:被称为“轻量级进程”,是程序执行流的最小单元。
一个进程可包括多个线程。一个线程不可独立存在,它必须是进程的一部分。一个进程一直运行,直到所有非等候的线程运行结束后才能结束,一般主线程结束后进程也就结束了。
进程的五种状态:
1.新建状态 // 如New Thread()时。
2.就绪状态 // 调用start()方法时,start()方法创建线程运行的系统资源,并调度线程运行run()方法。但run()方法可能不会马上执行。
3.运行状态 // 线程获得CPU时,真正运行run()方法。一个时刻只有一个线程处于运行状态。
4.阻塞状态 // sleep()方法进入阻塞;线程试图得到一个锁,但这个锁被其他线程持有;线程在等待某个触发事件。阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时处于就绪状态的其他线程便可以占有cpu,进入运行状态。
5.死亡状态 // 1.run()方法正常退出而自然死亡 2.一个未捕获的异常终止了run()方法。
synchronize关键字:
可以有synchronize方法和synchronize语句。有了它的保护,我们可以确保两个或两个以上的运行线程不会互相干扰。一般方法体执行完毕就会释放锁。
volatile变量:
线程每次在使用volatile修饰的变量时,都会从内存中读取变量最后修改的值。但并不能用来原子性操作。
ReentrantLock互斥锁:
Look需要手动释放锁,lock()是加锁,unlock()是释放锁,互斥区放在try()里面,unLock()放在finally()里面
ps:学习是漫长的过程,加油每一天。