并发
hncboy
这个作者很懒,什么都没留下…
展开
-
线程的活跃性问题
前面我们了解了多线程带来的安全性问题,接下来我们来看下多线程带来的活跃性问题。一、活跃性问题线程是为任务而生的,理想情况下,我们希望线程能一直处于运行(Runnable)状态,但是会由于一些因素,如处理器资源有限导致的上下文切换、程序自身的错误和缺陷。这些由于资源稀缺或者程序自身问题导致线程无法一直处于 Runnable 状态运行下去,又或者因为线程处于 Runnable 状态但是其要执行的任务一直无法进展的现象就被称为线程活跃性问题或活性故障。我们常见的“死锁”就是一种典型的活跃性问题,除了“死锁”,原创 2020-11-15 21:33:43 · 1003 阅读 · 1 评论 -
并发编程的理论基石
一、进程和线程1.操作系统、进程、线程的关系操作系统是包含多个进程的容器,而每个进程又是容纳多个线程的容器。 2.Oracle 官方定义官方定义进程:使用 fork(2) 系统调用创建的UNIX 环境(例如文件描述符,用户 ID 等),它被设置为运行程序。线程:在进程上下文执行的一系列指令。3.什么是进程进程(Process)是程序的运行实例。进程是程序向操...原创 2020-01-15 21:17:06 · 138 阅读 · 0 评论 -
线程的状态与属性
一、线程的状态线程的状态(生命周期)在 Thread 类中是一个枚举类,一共有六种状态,可以通过 Thread.getState() 方法获取当前线程的状态。每个线程同一时间只能处于一种状态,只可能有一次处于 NEW 状态和 TERMINATED 状态,此处的线程状态指的是在 JVM 中的线程状态。public enum State { NEW, RUNNABLE, ...原创 2020-01-17 15:48:56 · 322 阅读 · 0 评论 -
线程的启动与终止
一、线程的创建1.Oracle 官网描述There are two ways to create a new thread of execution.One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An ins...原创 2020-01-16 17:51:40 · 341 阅读 · 0 评论 -
线程间通信 wait/notify
一、简介每个线程在运行的时候,仅仅只是孤立运行的话,带来的价值是非常小的,如果多个线程能够相互配合去完成工作,那么在多线程场景中会带来非常大的价值。如一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。前者是生产者,后者是消费者。在 Java 语言中使用如下代码可以实现该功能。while (value != desire) { Thread.sleep(1000);...原创 2020-01-19 09:55:09 · 274 阅读 · 0 评论 -
Thead 类的常用方法
一、概览public static native Thread currentThread():返回对当前正在执行的线程对象的引用。public static native void yield():使当前线程主动放弃其对处理器的占用,可能会导致当前线程被暂停。public static native void sleep(long millis):使当前线程休眠指定的时间。public...原创 2020-01-21 02:08:57 · 965 阅读 · 0 评论 -
线程的安全性问题
Java 对线程的支持是一把双刃剑。多线程虽然拥有提高多核处理器能力、便于编程建模等优点,但也存在一些列风险,如安全性问题、活跃性问题、性能问题。本文将分析多线程带来的安全性问题。一、竞态条件1.什么是竞态多线程编程中经常遇到的一个问题就是对同样的输入,程序的输出有时候是正确的,有时候是错误的。这种一个计算结果的正确性与时间有关的现象就被称为竞态(Race Condition)。竞态往往伴...原创 2020-03-01 15:51:38 · 477 阅读 · 0 评论