线程,并发,同步

1.进程、线程?

概念上:进程:程序运行和资源分配的基础单位;线程:cpu调度和分配的基本单位;

现实中:打开资源管理器,管理的是进程;在Linux中经常使用 kill -9 XX来杀死一个线程;

总的来说,一个程序最少有1个进程(main方法执行的),1个进程至少有1个线程。线程是进程的一个实体,是比进程更小的,能独立运行的基本单位。

2.线程创建方式?

(1)继承Thread类,重写run()方法,调用start()方法;

(2)实现Runnable接口,重写run()方法,调用Thread类的构造方法,然后调用其的start()方法。

(3)采用线程池创建,一般有两种方式:其一,通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor);其二,通过ThreadPoolExecutor类进行自定义创建。

(4)通过Callable和Future创建线程。

3.线程的生命周期?

创建-运行-中断-死亡

4.线程的几个状态?

(1)新建状态(New):new一个线程;

(2)就绪状态(Runnable):调用start()方法,进入可运行线程池中,等待获取CPU使用权;

(3)运行状态(Running):调用run()方法,就绪状态的线程获取了CPU,进入运行状态;

(4)阻塞状态(Blocked):调用sleep(),wait()让出CPU,阻塞于锁,使本线程进入到阻塞状态;

(5)死亡状态(Dead):线程run()完毕或者调用stop()方法来结束线程。

5.sleep()和wait()的区别?

其一,sleep()是Thread类的方法,wait()是Object类的方法;

其二,sleep()不释放锁,wait()释放锁

其三,wait()需要notify()和notifyAll()来唤醒。

6.多线程锁的升级原理是什么?

在Java中,锁共有4种状态,级别从低到高依次为:

无锁->偏向锁->轻量级锁->重量级锁,锁可以升级但不能降级。

无锁:单线程运行,没有其他线程竞争;

偏向锁:无状态锁在一段时间之后会升级为轻量级锁;

轻量级锁:多线程运行,有轻微竞争;

重量级锁:多线程运行,竞争激烈;

7.synchronized的使用?

synchronized可用于修饰类,方法,代码块;

修饰类,其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象

修饰静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象

修饰方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;

修饰代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;

可参考链接:
JAVA中创建线程池的五种方法及比较 - PC君 - 博客园

Java并发编程之线程池、Callable和Future使用_loongshawn的博客-CSDN博客_callable 线程池

jvm锁的四种状态 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态 - daniel456 - 博客园

详细了解 Synchronized 锁升级过程-51CTO.COM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值