当前位置:学习网考试计算机类内容页

Java线程同步的优先级介绍

2020-09-16 00:40:01 计算机类 访问手机版

  【提要】本篇《Java线程同步的优先级是什么》特别为需要编程学习的朋友收集整理的,仅供参考。内容如下:

  Java线程同步在不断的学习中已经形成了一种套路。下面是小编为大家搜索整理的Java线程同步的优先级是什么,希望大家能有所收获,更多精彩内容请及时关注我们考试网!

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

  1、新状态:

  线程已被创建但尚未执行start 尚未被调用。

  2、可执行状态:

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

  3、阻塞状态:

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

  4、死亡状态:

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

  Java线程同步的优先级

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

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

  Java线程同步

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

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

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

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

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

推荐阅读