Java多线程知识点,线程各状态之间转换

1.多线程的优缺点

优点:

1.使程序的相应速度更快,

2.高效利用cpu资源,当前没有进行处理的任务可以将处理器时间让给其他任务;占用大量处理时间的任务可以定期将处理器时间让给其它任务。

3.可以随时停止任务。

4.分别设置各个任务的优先级以及优化性能

缺点:

1.可能会造成线程死锁;

2.等待共享资源时造成程序的运行速度变慢;

3.需要花费额外的cpu资源对线程进行管理。

 

2.start()方法和run()方法简介和区别

start()方法:

1.start用于启动线程,真正实现多线程运行。可以让代码直接执行start下面的方法。

2.调用start()方法让线程进入就绪(可运行)状态,此时并没有运行,当获取到cpu执行权后自动执行run()方法。

run()方法:

run()方法只是Thread类的普通方法,调用后仍然在当前主线程中运行。

3.volatile关键字的作用?

多线程使用volatile修饰的变量,保证了其在多线程之间的可见性,即每次读取到volatile修饰的变量都是最新的。(原理:每次获取该变量直接读取该变量的内容,而不从缓存中读取。)

 

4.volatile和synchronized对比

 

volatile

synchronized

使用范围

只能修饰变量

变量、方法、类

作用

仅实现变量的可见性

可以保证变量的可见性和原子性

执行效率

不会造成线程阻塞

锁住当前变量,可能会阻塞其它线程

 

5.Lock和synchronized区别

1.Lock是一个接口,synchronized是关键字。

2.Lock必须主动在finally块通过unLock()释放锁,可能造成死锁;synchronized遇到异常,自动释放线程占用的锁对象

3.Lock可让等待锁对象的线程相应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能相应中断;

4.通过Lock可以知道是否成功获取到锁,synchronized则不行

5.Lock可以提高多个线程进行读操作的效率

6.JDK1.6对synchronized加入许多优化,比如自适应自旋、锁消除、锁初花、轻量级锁、偏向锁等,故synchronized的性能并不比Lock差。提倡优先考虑synchronized来进行同步。

6.怎么唤醒一个阻塞的线程?

线程状态转换图:

如果线程因为调用了wait()、sleep()、或者join()方法而导致的阻塞,可以中断线程,并且抛出InterruptedException来唤醒它;如果遇到IO阻塞,无能为力(因为IO是操作系统实现的,Java代码无法直接接触到OS)。

7.Java如何获取到线程dump文件?

首先我们说下dump文件:故障定位(尤其是内存溢出)和性能分析时,经常用到一些文件类帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况。

常见的有heap dump[主要是记录内存信息]和thread dump(也叫javacore或java dump)[记录CPU信息]

dump文件作用:死循环、死锁、阻塞、页面打开慢等问题,打线程dump是最好的解决途径,因此线程dump也叫线程堆栈。

获取步骤:

1.获取线程pid:ps -ef | grep java

2.打印线程堆栈jstack pid

整合命令:ps -ef | grep java | grep -v grep |awk '{print $2}' | xargs jstack

 

8.sleep()和wait()区别

 

sleep()

wait()

定义

Thread类的方法

Object类的方法

效果

都能冻结当前线程

使用

必须指定时间,在该时间内线程睡眠,进入临时阻塞状态

如果没有设置时间,线程一直阻塞,必须通过notify或notifiAll()唤醒

锁:都释放cpu资源

不释放锁

释放锁

 

9.ThreadLoacal的作用

ThreadLocal是线程安全的存储机制。即在当前线程中的不同方法之间共享一个对象。

 

10.ConcurrentHashMap的并发度?

ConcurrentHashMap采用锁分段技术,默认并发度是segment的大小,默认是16

Hashtable锁住整张表。

原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值