进程:操作系统运行程序的基本单位,是操作系统分配资源的基本单位
动态性,并发性,独立性
线程:进程中的一个执行单元,
一个进程中所有的线程共享该进程的资源,每个线程可以独立调度
多线程优点:最大程度利用资源,减少时空开销
线程创建方式:
c1 extends Thread{
run(){
线程体;
}
}
c2 implements Runnable{
run(){
线程体
}
}
启动线程:
继承Thread new c1().start();
实现Runnable C2 cc= new C2(); new Thread(cc).start();
线程:进程一个执行单元,共享进程资源,可以独立调度
多线程:减少时空开销,充分利用系统资源
创建线程:
1 extends Thread
2 implements Runnable
启动线程
new Thread子类().start();
new Thread(Runnable实现类).start();
线程生命周期
新建--(start())-->就绪--(抢到cpu执行权)-->运行---->死亡
运行---->阻塞--->就绪
从运行---1 sleep() 2wait() 3等待锁--->阻塞
就绪<----1睡眠时间结束 2notify() 3锁可用---阻塞
调度线程:
join(); yield(); sleep()
线程的优先级:
1-10
setPriority(); getPriority();
线程的分类:
用户 后台(守护 生命周期随着守护的线程的结束也结束)
setDamon(true)(写在start()之前)
垃圾回收机制 gc
线程同步(线程安全)synchronized
多个线程排队访问一部分关键性的代码或数据,不能让多个线程同时访问。
为了解决多个线程同时访问出现的数据冲突问题
如何同步(原则:尽量减少同步的代码)
同步方法
同步代码块
死锁代码设计的问题
x1 x2
A 锁上x1{ 需要使用x2 }
B 锁上x2{ 需要使用x1 }
线程的通信:
wait() notify() notifyAll()(必须执行在synchronized代码中)
多个线程共享一部分资源。