Java多线程概念知识点有哪些

介绍

这篇文章主要介绍“Java多线程概念知识点有哪些”,在日常操作中,相信很多人在Java多线程概念知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Java多线程概念知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

线程安全:

通过加锁保证数据的一致性。也就是说当一个线程访问某个数据时,通过加锁操作对数据进行保护,其它线程在加锁期间不能对其访问

线程封闭

当多个线程访问共享变量时,需要通过加锁来保证数据同步,增加了程序的复杂性。避免数据同步的一种方式是不共享变量,比如使用局部变量和ThreadLocal

线程调度

系统为线程分配杯使用权的过程

<李>

协同式线程调度

线程的执行时间由线程自己控制,当自己执行完后,主动通知操作系统切换到另外一个线程上执行。好处是实现简单,线程对自己的操作是可知道的,没有什么线程同步问题。缺点是线程执行时间不可控,如果一个线程有问题,可能会一致阻塞在那里。

<李>

抢占式线程调度

每个线程的执行时间有操作系统分配,线程的切换不由线程本身决定(Java中,thread . yield()可以让出执行时间,但无法获取执行时间)线程执行时间系统可控,也不会有一个线程导致进程阻塞。

Java线程调度就是抢占式调度

可以通过设置线程的优先级让一些线程尽可能的先执行多执行(Java一共有10个线程优先级从Thread.MIN_PRIORITY至Thread.MAX_PRIORITY),在两个线程同时处于准备时,优先级越高越容易被执行。但优先级并不靠谱,因为Java线程时通过映射到原生线程来实现的,所以线程调度还是取决于操作系统。

状态转换

<李>

新建(新)创建后尚未启动的线程

<李>

运行(可运行):可包括操作系统中的运行和准备好了。处于此状态的线程有可能在运行,也有可能在等待CPU为它分配执行时间。线程创建后,其它线程调用了该线程的开始方法,那么该线程就位于<代码>可运行线程池中> <李>

无限期等待(等待):该状态下的线程不会被分配CPU执行时间,要等待被其它线程进行显示唤醒。如没有设置超时的Object.wait()方法和Thread.join()方法,以及LockSupport.park()方法

<李>

限时等待(时间等):该状态下的线程不会被分配CPU执行时间,只不过不需要被显示的唤醒,在一定时间后会被系统自动唤醒。如thread . sleep(),设置了超时的Object.wait()和Thread.join (), LockSupport.parkNanos()以及LockSupport.parkUntil()方法

<李>

阻塞(阻塞):线程被阻塞了,与等待的区别是:阻塞线程在等待一个排它锁。

阻塞状态是因为某种原因放弃CPU使用权,暂时停止执行,直到线程进入就绪状态,才有机会转到运行状态。

<李>

结束(终止):线程执行完了或者异常退出了运行()方法,该线程结束生命周期

阻塞常见的三种情况

1。等待阻塞(无限期等待):运行的线程执行等()方法,该线程会释放占用的资源,JVM会把该线程放入<代码>等待池>

2。同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被其它线程占用,则JVM会把该线程放入<代码>锁池>

到此,关于“Java多线程概念知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

Java多线程概念知识点有哪些