多线程与高并发1-基础定义

进程和线程

进程是操作系统能够分配的最小单位
线程是操作系统能够调度的最小单位(一个程序的不同执行路径)

启动线程的三种方式

1.Thread 2.Runnable 3.Executors

sleep和yield

sleep线程进行睡眠,让出CPU给其他线程继续运行。到规定的时间唤醒
yield将当前线程回到等待队列中,返回到就绪状态,让出CPU

wait和notify

需要在同步中执行,notify并不会释放锁,wait才会释放锁

join

将并行执行转为串行执行

ThreadState线程状态

在这里插入图片描述

Synchronized

1、对某个对象加锁,只有拿到锁的才能执行下一步代码
2、在Hotspot中,通过对象头中64位,拿出两位(mark word)记录锁的状态。

 1.JVM早期,synchronize非常重量级,后来改进锁升级的概念。
 2.一个线程时,mark word仅记录了线程ID,并没有上锁(偏向锁)
 3.如果有线程征用,升级为自旋锁(处于用户态,执行时间较短,线程数比较少,使用自旋锁。执行时间较长,线程较多使用系统锁)
 4.如果在自旋10次后,仍未获得锁,升级为重量级锁,(OS)

3、synchronized(this) 等价于 synchronized方法
4、静态方法的synchronized等价于synchronize这个类
5、可重入锁:一个同步方法可以调用另外一个同步方法,一个线程已经拥有了某个对象的锁,再次申请的时候仍会得到该对象的锁
6、程序中出现异常,默认情况锁会被释放,导致等待线程乱入,产生数据不一致问题

发布了25 篇原创文章 · 获赞 0 · 访问量 586

猜你喜欢

转载自blog.csdn.net/RaymondCoder/article/details/105060888