线程 同步

线程

多线程原理;
这里写图片描述
每个线程都会在栈里面开辟属于自己的空间, 在运行mian 的时候,就可以一起进行
//关于栈的问题 ,当基础类型在栈里面 当引用类型在栈里面
继承Thread类及常用方法;
这里写图片描述
这里写图片描述
线程对象调用run()方法不开启线程,仅是对象调用方法。线程对象调用start()方法开启线程,并让jvm调用run()方法在开启的线程中执行。
. 对于每个线程只能进行调用一次 starr
多个线程同时进行的, 但对于每个线程 都是独立的
.实现Runnable接口及特点
这里写图片描述

这里写图片描述

定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
2. 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,Thread对象才是真正的线程对象。
3. 调用线程对象的start()方法来启动线程。
线程_两种方式的区别:
需要子类继承Thread, 不过只能是单继承 , 使用起来特别麻烦
需要子类实现runable接口,可以进行多继承,使用起来特别简单,所以建议使用

匿名内部类的方式实现线程:
这里写图片描述
这里写图片描述
这里写图片描述
Thread类的构造方法:
1).Thread():
2).Thread(String name):使用一个“线程名称”创建一个线程对象;
3).Thread(Runnable r):使用一个Runnable对象创建一个线程对象;
4).Thread(Runnable r,String n):使用一个Runnable和线程名称构造一个线程对象。

同步

多线程的安全性问题:
这里写图片描述
当多个线程访问同一个资源是,且多个线程同写同一个资源,则就会造成线性安全问题.解决这个问题 有三个方法 , 同步代码块 , 同步代码, 锁机制
由于安全问题. 出现了, 同步.
同步代码使用synchronized进行修饰的叫做同步方法
这里写图片描述
这里写图片描述
这里写图片描述

同步代码块;synchronized 关键字可用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问
这里写图片描述
这里写图片描述
Lock锁:
java.util.concurrent.locks.Lock 机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作, 同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。 \
Lock;具有锁住 unlock;具有解锁的功能.
这里写图片描述
这里写图片描述
新建;线程刚刚被建立,还没有进行启动
runable;可运行;线程可以在Java虚拟机中运行的状态,可能运行自己的代码,也可能没有,这就取决于操作系统处理器.
blocked锁阻塞;当一个线程试图获取一个对象锁,而这个对象锁被其他对象所持有,其他锁 处于一个等待状态,这个所就是blocked 锁阻塞的状态,其他锁运行时,这该线程也就进入 runable 状态
waiting 无限等待;一个线程在等待另一个线程执行(唤醒)动作时,该线程进入waiting 状态,进入这个状态是不可能自动唤醒的,必须等待,另一个线程调用notify或者notifyAll 才可以进行唤醒
time waiting 计时等待; 同 waiting 状态,给他们订了 一定的时间,等到时间一到,或者接收到唤醒通知, 常用方法有 Thread.sleep Object.wait .
Teminated 被终止 ; 因为run方法正常退出 而死亡,或者因为没有捕获的异常终止了run方法而死亡.
1).新建:MyThread t = new MyThread();
2).可运行(待运行):t.start();
3).锁阻塞:运行后调用某个方法,但此方法已被其他线程“锁上了”。
4).无限等待:运行后,调用了“锁的wait()”方法。
5).计时等待:运行后,被调用了sleep(…);
6).被终止:run()方法正常运行完毕。
等待与唤醒:
这里写图片描述
这里写图片描述
状态图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42943720/article/details/82708263
今日推荐