多线程与高并发
Ethan-cw
越学越发现自己知道的越少!
展开
-
Java并发基础(十)——线程优势及风险
一、线程的优势 线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能。线程能够将大部分的异步工作流转换成串行工作流,因此能更好地模拟人类的工作方式和交互方式。此外,线程还可以降低代码的复杂度,使代码更容易编写、阅读和维护。 在GUI应用程度中,线程可以提高用户界面的响应灵敏度;在服务器应用程序中,可以提升资源利用率以及系统吞吐率。线程还可以简化J...原创 2019-07-24 02:03:49 · 240 阅读 · 0 评论 -
Java并发基础(九)——线程优先级
一、线程优先级概述 Java中的线程可以有自己的优先级。优先级高的线程在竞争资源时会更有优势,更有可能抢占到资源而优先被执行。当然这也只是一个概率问题,并不是一定就是这样。如果运气不好,那高优先级的线程可能也会抢占资源失败。 由于线程的优先级调度和底层操作系统有密切关系,在各个平台上表现不一,并且这种优先级产生的后果也可能容易预测,无法精准控制。比如一个低优先级...原创 2019-07-18 16:51:02 · 294 阅读 · 2 评论 -
Java并发基础(八)——线程组(ThreadGroup)与守护线程(Daemon)
线程组(ThreadGroup) 在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将相同功能的线程放置在同一个线程组里。下面通过示例来说明。public class ThreadGroupName implements Runnable { public static void main(String[] args){ ThreadGr...原创 2019-02-22 11:58:12 · 448 阅读 · 0 评论 -
Java并发基础(七)——volatile与Java内存模型(JMM)
Java内存模型是围绕着原子性、有序性和可见性来展开的。为了在适当的场合,确保线程间的有序性、可见性和原子性。Java使用了一些特殊的操作或关键字来声明、告诉虚拟机,在这个地方要尤其注意,不能随意变动优化目标指令。关键字volatile就是其中之一。 volatile翻译成中文是“易变的、不稳定的”的意思,这就是它的语义。 当使用关键字volat...原创 2019-02-21 19:09:39 · 152 阅读 · 1 评论 -
Java并发基础(四)——并发与JMM
概述JMM(Java Memery Model),Java内存模型。再切换到并发,并发程序复杂的原因是因为并发程序访问的数据和执行顺序等有复杂的情况。而并发程序中的数据访问与JMM关系密切的,所以这里把并发和JMM联系起来说明。因为程序中的变量自然是与JMM关联的。比如有一个共享变量的值为1,在内存中值为1,线程A读的值为1,如果线程安全没有控制好,线程B修改了该共享变量的值,后面的线程再...原创 2019-01-17 22:04:13 · 164 阅读 · 0 评论 -
Java并发基础(三)——并行的两个重要定律
概述总的来说,使用并行程序的最重要的目的有两个。一是为了获得更好的性能;二是业务模型的需要,确实需要多个执行实体。这里主要关注程序性能的问题。当将串行程序改造为并发程序,提高了程序的性能,但空间提高了多少?是否真的有提高?还是一个需要研究的问题。目前主要有两个定律对这个问题进行了解答,一个是Amdahl定律,另一个是Gustafson定律。 Amdahl定律Amdahl定律是计...原创 2019-01-15 22:55:27 · 311 阅读 · 1 评论 -
Java并发基础(二)——并发级别
概述根据并发的控制策略,可将并发的级别分为阻塞、无饥饿、无障碍、无锁、无等待五种。 阻塞当前线程是阻塞的,那其它线程在释放资源之前,当前线程是无法继续执行的。当我们使用synchronized关键字或重入锁时,得到的线程就是阻塞的线程。synchronized和重入锁都试图在执行后续代码前,得到临界区的锁,如果得不到,线程就会被挂起等待,直到占有了所需要的资源。 无饥饿...原创 2019-01-15 21:46:03 · 306 阅读 · 0 评论 -
Java并发基础(一)——常见概念
同步与异步同步(Synchronous):方法调用时,调用者必须等到方法调用并返回结果后,才能继续执行后面的操作。如果没有得到返回就不继续执行,有返回结果了就一个一个顺序的执行,需要等待,根据返回结果协调执行。异步(Asynchronous):方法调用时,调用者不必等待方法返回结果便可继续执行后面的操作,当调用的方法执行后将通知调用者。通知的方式一般有三种:状态、通知、回调。状态:监听...原创 2019-01-15 11:27:52 · 316 阅读 · 1 评论 -
Java并发基础(六)——线程的基本操作
这里主要说明常用的线程操作,是我们平常用的比较多的地方。虽然简单,却有一些值得深究的地方。1,新建线程 创建线程的方法有多种,这里就用很普通的方法,直接创建Thread类的一个实例。// 创建线程Thread t = new Thread();// 调用开始方法t.start(); 这里需要注意的是,调用Thread的sta...原创 2019-02-21 18:11:13 · 453 阅读 · 1 评论 -
Java并发基础(五)——线程的状态
线程与进程线程是轻量级的进程,是程序执行的最小单位。进程是系统进行资源分配和调度的基本单位。之所以使用多线程去进行并发程序的设计,是因为线程间的切换和调度的成本远远低于进程。下面说明线程的6种状态,但并不说明因Java中线程的方法导致线程状态的变化,会在后面专门具体介绍方法。如果对方法理解掌握了,自然就明白了某个方法的执行会怎样引起线程状态的变化。 线程的状态 NEW(...原创 2019-01-18 16:01:17 · 175 阅读 · 0 评论