`
eric_weitm
  • 浏览: 242789 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java多线程的几个层次

    博客分类:
  • java
 
阅读更多

一、基础

1、jvm跨平台说的是跨硬件和OS平台,是面向机器的低层次的虚拟机

2、内存划分为main memory(对应裸机内存)和每个线程的工作内存(对应进程用户空间)。

3、java线程对应os的进程,工作空间对应进程的用户空间,jvm对应硬件

4、主内存的指令:lock(锁定到某个线程) unlock read write

线程工作内存指令:load store use assign 。所有的函数内的操作,都针对线程的工作空间内存。

5、linux中。一个java线程对应一个内核线程(轻量进程)

6、CAS:自旋锁,乐观锁,不是每次强制切换上下文环境,而是短时间的轮训和等待,相当于锁的粒度更小了。CAS的原理:循环处理,每次比较假设和设置,一般不冲突的会直接成功,适合于并发冲突不是非常明显的情况。

7、java线程是抢占式的调度

8、synchronized 默认锁住的是 this对象,static synchronized 锁住代码段,都是悲观锁

 

二、java并发的抽象层次

1、lock condition 对应posix的线程原语,可以细粒度的控制并发。

ReadWriteLock:可以多个线程读,一个写,可以降级;

ReentrantReadWriteLock: 可重入可以实现更高的吞吐率

 

2、volatile:一个线程的修改别的线程可以看到;不允许指令重排序优化。(不能实现并发写)

3、atomicXXX 使用乐观锁实现的原子更新数据类型

4、线程安全的集合类 ConcurrentHashMap 

CopyOnWriteArrayList

BlockingQueue

ArrayBlockingQueue 内部实现是将对象放到一个数组里(固定长度、省内存)

DelayQueue 每个元素的 getDelay() 方法返回的值的时间段之后才释放掉该元素

LinkedBlockingQueue 以一个链式结构(链接节点)对其元素进行存储

PriorityBlockingQueue 取出时有优先级

SynchronousQueue   只能容纳一个元素

BlockingDeque(LinkedBlockingDeque) 双端操作,分别支持在first和last端的操作

ConcurrentNavigableMap

 

5、线程间交互

CountDownLatch 等对方结束

CyclicBarrier:到了地方一起开始

Semaphore:控制并发线程个数

Exchanger :分别做,在固定的地方进行协调

Phaser:复杂过程的同步控制

 

6、消息队列,线程池

ExecutorService Callable(会返回结果) Future(get时如果没有结果会阻塞)

 几种线程池的区别:

newCachedThreadPool:有空闲用空闲,没有就新建,不限制总个数

newFixedThreadPool:控制总个数

newScheduledThreadPool:可以调度

newSingleThreadExecutor:单线程,保证先进先出

newWorkStealingPool:自己队列空闲时,可以帮助别的线程干活,适合于处理时间差异较大时(线程切换,本身有消耗)

7、ForkJoinPool 分叉和合并(分治策略),类似于map reduce的

 

 

三、并发模型抽象

1、生产、消费

2、读写

3、哲学家竞争

分享到:
评论

相关推荐

    多线程全面遍历磁盘文件

    实现多线程遍历磁盘文件,我们需要以下几个关键步骤: 1. **创建线程池**:线程池是一种管理线程的方式,它可以预先创建一定数量的线程,然后根据任务需求分配工作。这能避免频繁创建和销毁线程带来的开销,提高...

    4JAVA编程高级-多线程编程

    ### JAVA编程高级-多线程编程 ...总之,Java中的多线程编程是一个非常重要的主题,对于提高程序的性能和响应速度有着不可替代的作用。掌握好Java中的多线程机制,可以帮助开发者更好地设计和实现高效的应用程序。

    武汉理工大学 面向对象与多线程综合实验 档案管理系统

    【武汉理工大学】的这个【面向对象与多线程综合实验】是一个典型的软件开发项目,旨在让学生深入理解并实践这两种核心技术在实际系统中的应用。在这个实验中,学生将设计并实现一个【档案管理系统】,该系统服务于三...

    基于Java的多线程并发服务器的设计与应用

    在Java中实现多线程并发服务器,需要掌握以下几个关键技术: - **Socket编程**:用于建立客户端与服务器间的网络连接。 - **多线程**:实现并发处理的核心技术。 - **输入输出流**:用于处理客户端发送的数据及向...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    Java线程.pdf

    在多线程环境中,线程安全是指程序在多线程环境下能够正确执行,不会出现数据不一致等问题。为了保证线程安全,Java提供了一些内置机制: - **不可变对象**:一旦对象创建后就不能更改其状态,因此在多线程环境下是...

    java线程.pdf

    10. **多线程设计模式**:了解并掌握几种常见的多线程设计模式,比如守护线程、工作偷窃(Work Stealing)模式等,能够帮助开发者在实际项目中更好地运用多线程技术。 11. **性能优化**:学习如何使用Java的监控工具...

    java笔记 异常 多线程

    下面将详细解析与“java笔记 异常 多线程”相关的知识点,包括异常处理的基本概念、如何捕捉和抛出异常、自定义异常的创建,以及这些知识点在实际编程中的应用。 ### Java异常处理 Java异常处理是Java语言的一个...

    传智播客_Java培训_毕向东_Java基础[05-多线程]

    ### 传智播客_Java培训_毕...以上内容涵盖了Java多线程的基础知识,包括线程的创建、生命周期管理、线程安全以及线程间的通信等内容。通过深入理解这些知识点,可以更好地利用多线程技术提升应用程序的性能和用户体验。

    WEB多线程开发

    在IT行业中,尤其是在Java EE...在“WEB多线程开发.ppt”这个文件中,可能包含了上述知识点的详细讲解,包括理论介绍、示例代码、最佳实践等,可以帮助开发者深入理解和掌握Java EE环境下的多线程编程技巧。

    多线程设计模式

    在这个主题下,我们将深入探讨多线程设计模式的概念、重要性以及在Java中实现这些模式的实践方法。 首先,理解多线程的基本概念是至关重要的。线程是操作系统分配CPU时间的基本单位,一个进程可以包含多个线程。多...

    Java-REST-SOAP-AeroSpike-多线程

    总之,这个主题覆盖了Java多线程编程、REST和SOAP服务的创建、以及AeroSpike数据库的使用,这些都是现代软件开发中的重要技术。理解和掌握这些知识点,对于提升Java开发者在企业级应用开发中的技能和竞争力至关重要...

    Java多线程测试策略及测试方法探讨* (2006年)

    本文基于对Java多线程特性的深入分析,探讨了Java多线程的测试策略及测试方法,并提出了一个由类测试、集成模块测试和系统测试三个层次组成的Java多线程测试框架。此外,还详细讨论了多线程的继承测试、同步测试以及...

    2020 兴业数金Java笔试题.docx

    1. 计算机存储系统分为几个层次?计算机存储系统通常采用三级层次结构,包括高速缓冲存储器(Cache)、主存储器和辅助存储器。 2. 如何理解分层存储?分层存储是指计算机存储系统按照不同的存储容量、存取速度和价格...

    中软国际java基础

    9. **多线程**:介绍线程的创建和同步,包括Thread类、Runnable接口、同步机制(synchronized关键字和wait/notify机制)。 10. **文件和目录操作**:教授如何在Java中操作文件和目录,包括文件的创建、删除、复制等...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    Java学习.pdf

    6. Java多线程编程:Java多线程编程允许同时执行多个任务。主要包括创建线程的两种方式继承Thread类和实现Runnable接口,线程的同步和通信机制synchronized、wait()、notify()、notifyAll()等。 7. Java网络编程:...

    Java 里的几个基础概念问题

    Servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。 ArrayList、Vector 和 LinkedList 是 Java 中常用的集合类,ArrayList 和 Vector 都是...

    android多线程技术的应用

    多线程在Android中的实现主要通过以下几种方式: 1. **Thread**:可以直接创建Thread对象并重写其run()方法,然后调用start()启动线程。这是最基础的多线程实现方式。 2. **Handler/Looper/Message**:这种机制...

    java程序设计例题全集

    综上所述,这份“java程序设计例题全集”提供了丰富的Java编程实践素材,覆盖了从基础到进阶的多个层次,不仅有助于学习者巩固基本语法,还能让他们接触到更复杂的概念,如网络编程和软件工程实践。对于想要提升Java...

Global site tag (gtag.js) - Google Analytics