- 相同 :Sleep和yield都会释放CPU 。
- 不同:Sleep使当前线程进入停滞状态,所以执行Sleep的线程在指定的时间内肯定不会执行;yield只是使当前线程重新回到可执行状态,所以执行yield的线程有可能在进入到可执行状态后马上又被执行 。Sleep可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield只能使同优先级的线程有执行的机会 。
死锁:指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去 。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 。
死锁产生的四个必要条件(缺一不可):
- 互斥条件:顾名思义,线程对资源的访问是排他性,当该线程释放资源后下一线程才可进行占用 。
- 请求和保持:简单来说就是自己拿的不放手又等待新的资源到手 。线程T1至少已经保持了一个资源R1占用,但又提出对另一个资源R2请求,而此时,资源R2被其他线程T2占用,于是该线程T1也必须等待,但又对自己保持的资源R1不释放 。
- 不可剥夺:在没有使用完资源时,其他线性不能进行剥夺 。
- 循环等待:一直等待对方线程释放资源 。
1.6 补充:并发和并行的区别
并发:是指在某个时间段内,多任务交替的执行任务 。当有多个线程在操作时,把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行 。在一个时间段的线程代码运行时,其它线程处于挂起状 。
并行:是指同一时刻同时处理多任务的能力 。当有多个线程在操作时,CPU同时处理这些线程请求的能力 。
区别就在于CPU是否能同时处理所有任务,并发不能,并行能 。
1.7 补充:线程安全三要素
- 原子性:Atomic包、CAS算法、Synchronized、Lock 。
- 可见性:Synchronized、Volatile(不能保证原子性) 。
- 有序性:Happens-before规则 。
- 互斥同步:Synchronized、Lock 。
- 非阻塞同步:CAS 。
- 无需同步的方案:如果一个方法本来就不涉及共享数据,那它自然就无需任何同步操作去保证正确性 。
- Synchronized关键字
- Lock
- CAS、原子变量
- ThreadLocl:简单来说就是让每个线程,对同一个变量,都有自己的独有副本,每个线程实际访问的对象都是自己的,自然也就不存在线程安全问题了 。
- Volatile
- CopyOnWrite写时复制

文章插图
创建线程的方法
继承Thread类:
public class ThreadCreateTest {
public static void main(String[] args) {
new MyThread.start;
}
}
class MyThread extends Thread {
@Override
public void run {
System.out.println(Thread.currentThread.getName + "\t" + Thread.currentThread.getId);
}
}
实现Runable接口:
public class RunableCreateTest {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable;
new Thread(runnable).start;
推荐阅读
- rar解压工具哪个好 免费rar解压软件哪个好
- 忘记手机指纹解锁数字密码怎么处理掉
- 该怎样才能发表微博,为什么发的微博无法显示
- 电视机网络版和电视版有什么区别
- hwlal00是什么手机,华为hwl一al00是什么型号
- 影视大全该怎样才可以离线缓存
- 怎么给标注尺寸,ps怎么给中的物品标注尺寸大小
- 进口车查询是哪个网站,进口车从玻璃上怎么看是哪年款
- 黑云翻墨未遮山的下一句,黑云翻墨未遮山描绘的画面是什么?
