一、概念
进程:操作系统中并发执行的任务 称为进程
并发执行原理:宏观并行,微观串行
线程:在一个进程中,并发执行的多个程序逻辑
主函数----->主线程
线程的组成
1) CPU 操作系统选中,分配时间片
2) 数据支持 堆空间共享,栈空间独立 需要从内存空间中获得数据
3) 代码
1. 继承Thread父类
覆盖run()方法
public void run(){
for(int i=0;i<5000;i++){
System.out.println("+++"+i);
}
}
Thread t1=new ThreadA(); //创建线程对象
t1.start(); //启动线程
2. 实现Runnable接口
实现run()方法
public void run() {
for (int i = 0; i < 5000; i++) {
System.out.println("---" + i);
}
}
ThreadB target=new ThreadB(); //创建目标对象
Thread t2 = new Thread(target); //目标对象作为参数,理由线程构造方法创建线程对象
t.start(); //启动线程
二、线程的状态图
三、线程同步
临界资源:多线程并发时,共享一个对象
原子操作:要执行的代码,做为一个整体,如果执行则都执行,如果不执行则都不执行,代码不可分割
线程同步:多线程并发时,为了保证临界资源的正确性,而不破坏代码的原子操作
关键字: synchronized
1. 同步代码块
使用在方法内部
语法:
synchronized(临界资源对象){
//原子操作
}
线程只有获取到临界资源对象的锁标记,才能执行其后{}中的代码,并且必须等{}中的所有代码执行完成,才能释放锁标记
如果没有获取到临界医院对象的锁标记,则该线程处理等待状态(锁池),直到拿到锁标记
2. 同步方法
public synchronized 返回值类型 方法名(形参){
//原子操作
}
等同于 synchronized(this){
//原子操作
}



