Java线程同步的优先级介绍

开发 后端
Java线程同步在不断的学习中已经形成了一种套路。首先我们开始看看Java线程同步的四种状态。希望大家有所收获。

Java线程同步在使用的时候需要我们主要很多的事情,下面我们就来看看如何才能更好的使用这个语法呢?首先我们来看看线程的四种状态,希望大家在这个之中最找到很多自己需要的。

1、新状态:线程已被创建但尚未执行(start() 尚未被调用)。

2、可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。

3、阻塞状态:线程不会被分配 CPU 时间,无法执行;可能阻塞于I/O,或者阻塞于同步锁。

4、死亡状态:正常情况下run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。

Java线程同步的优先级

线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。#t#

你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

Java线程同步

由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。

我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。

synchronized 方法:通过在方法声明中加入synchronized关键字来声明 synchronized 方法。synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 synchronized)。

在 Java线程同步中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized,以控制其对类的静态成员变量的访问。
 

责任编辑:张浩 来源: 博客园
相关推荐

2009-08-28 17:10:59

C#线程优先级

2020-06-04 08:36:55

Linux内核线程

2009-08-12 13:07:13

C#运算符优先级

2012-08-14 09:38:29

WAN优化

2010-09-01 14:10:36

CSS优先级

2022-12-23 09:41:14

优先级反转

2023-06-30 19:44:56

CPU调频线程

2020-09-30 09:07:37

DevOps

2021-04-06 10:45:18

React前端优先级

2022-06-02 09:29:55

线程组线程树状结构

2010-09-13 17:30:07

CSS优先级

2010-08-31 11:04:48

CSS优先级

2010-09-06 14:53:27

CSS优先级

2023-11-03 08:22:09

Android系统算法

2017-07-17 17:35:23

java开发操作系统进程的优先级

2015-06-02 11:26:29

产品团队

2010-03-17 15:34:09

Java线程同步引用

2012-06-27 10:59:05

WAN优化应用交付

2024-03-11 07:46:40

React优先级队列二叉堆

2015-06-02 14:10:23

创业事情优先级
点赞
收藏

51CTO技术栈公众号