java基础线程

**
线程理解
**

1.概念

进程:计算机执行的任务
线程:执行进程中的小任务 多线程
计算机在执行过程中,在同一时间只能让cpu的核执行一个进程,进程 有多个线程来执行,在同一时刻cpu只能处理一个线程

2.引入多线程

当线程被cpu执行时cpu开始工作,线程需要和软件或者硬件进行交 互时,cpu就是出于空闲状态,引入多线程可以提供cpu使用效率
0.2 0.8 1个线程 0.36 0.8*0.8=0.64 2个线程

3.创建多线程的方式—(Thread)

1、继承Thread类,重写run方法(线程代码逻辑),调用start方法 用于开启线程
public static void main(String[] args){
//让线程执行–执行线程代码逻辑所在的类
Demo d=new Demo();
//开始线程—Thread类里的方法
d.start();
//主逻辑代码
for(int i=10;i>0;i–){
System.out.println(“main:”+i);
}
}

2、实现Runnable接口,重写run方法(线程代码逻辑),通过 Runnable接口的实现类对象构建Thread类对象,调用start方法开启线程

public startic void main(){
//通过Runnable实现类对象构建Thread的类对象
Thread t=new Thread(new TDemo());
//开启线程
t.start();
//
for(int i=10;i>=0;i–){
system.out.println(“main:”+i);
}
}

3、实现Callable接口,重写call方法

在这里插入图片描述

4.加锁—同步代码块锁、同步方法锁

在这里插入图片描述
在这里插入图片描述

5.锁之间的相互嵌套—死锁

在这里插入图片描述

7.wait和sleep区别

sleep–如果线程没有加锁,就会释放线程的执行权,如果加锁就不会释放执行权,跨越指定休息时间, Thread类的静态方法
wait —可以指定等待时间,到了也能唤醒,如果不指定时间就只能手动唤醒, 不管有没有锁都会释放线程执行权 Object里的普通方法

8.线程的状态
在这里插入图片描述

9.守护线程

被守护线程一旦执行结束守护线程也就结束了 只要不是守护线程就是被守护线程GC
在这里插入图片描述

10.线程优先级(1-10)

理论上有优先级越大越有概率抢到执行权,如果西拿出之间的有限差值超过5才会有一点点差别

在这里插入图片描述