`
kaihuigy
  • 浏览: 5704 次
社区版块
存档分类
最新评论

Java 多线程的基本概念

阅读更多

线程安全性

要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是共享的和可变状态的访问。

Java的主要同步机制是关键字synchronized,它提供乐一种独占的加锁方式,意味着只有一个线程能持有这种锁。

即使每个操作是原子的,复合操作也不一定能保证原子性。

重入

重入意味着已经取得锁的线程,如果再次请求自己获得的锁,那么也是允许的。

重入的一种实现方法是,每个锁关联一个线程持有者和计数器。如果计数值为0时,锁将被释放。

对象的共享

使用同步可以避免多个线程在同一时刻访问相同的数据。

同步还有另外个重要方面,即保证内存可见性。我们不仅希望某个线程正在使用对象状态而另个线程同时在修改改状态。

而且希望当一个线程修改了对象状态后,其它线程能够看到状态的变化。

因此,加锁的意义不仅在于互斥,还包括内存可见性。

重排序

Java内存模型允许编译器和CPU对操作顺序进行重排序。

使用volatile类型后,编译器和运行时都会注意到这个变量是共享的,因此在读取volatile类型时,总会返回最新的值。

发布和逸出

当某个不该被发布的对象被发布时,称为逸出。

ThreadLocal

ThreadLocal可以用于保证线程封闭。

开发人员不该滥用ThreadLocal,避免引入隐式的耦合。

ThreadLocal详细分析

基础构建模块

####同步容器类 同步容器类Vector\HashTable对于某个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。

同步容器类的效率低,而且需要注意避免ConcurrentModificationException。

诸如Set的toString()方法会隐藏的调用迭代器。

并发容器

ConcurrentHashMap采用了分段锁(Lock Striping)的机制,在并发情况下具有良好的性能。

同时ConcurrentHashMap提供了一系列复合的原子操作,如:

  1. putIfAbsent(K,V)仅当k没有对应的v值时插入
  2. remove(K,V)仅当K对应的值为v时删除
  3. replace(K,old,new)仅当k为old时才替换为new。

Queue和BlockingQueue是Java 5.0后新增的容器类,提供了先进先出的队列。

Queue在没有元素时将返回null,而BlockingQueue则将阻塞,直到队列不为空。

BlockingQueue可以用于生产者-消费者模式。

Java 6中增加了双端队列Deque(发音deck)和BlockingDeque。

Deque可以在队首和队尾插入和移除。

和BlockingQueue不同的是,多个线程可以分别拥有一个BlockingDeque,让自己的为空时,可以从别的线程的BlockingDeque的队尾获得数据,这样可以提升更高的效率。

同步工具类

除了BlockingQueue,同步工具类还有信号量semaphore、闭锁latch、栅栏barrier。

CountDownLatch是一种闭锁latch,countDown方法用于将计数递减,await方法等待直到计数器为0。

Semaphore则维护了一组资源的许可,当获取资源时,首先要通过acquire获得许可,然后通过release返回许可。

CyclicBarrier类似CountDownLatch,CountDownLatch用于等待的事件,而CyclicBarrier则用来等待线程。

CountDownLatch是一个线程等待多个线程,而CyclicBarrier则是多个线程同时等待。

CyclicBarrier像水闸一样,只有所有的水都到齐,超过一定的阈值,才能防闸出水。

FutureTask在Executor中表示异步操作,如果操作未完成,则get会等到操作结束。否则立即返回。

分享到:
评论

相关推荐

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    JAVA多线程练习题答案。

    JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程进度条

    首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,或者实现Runnable接口并提供run()方法。在run()方法中编写...

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    java 多线程并发实例

    本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...

    JAVAJAVA多线程教学演示系统论文

    《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...

    JAVA多线程编程技术PDF

    总结起来,“JAVA多线程编程技术PDF”涵盖了多线程的基本概念、同步机制、线程通信、死锁避免、线程池以及线程安全的集合类等内容。通过深入学习这份资料,开发者可以全面掌握Java多线程编程技术,提升程序的并发...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    通过学习《Java多线程编程实战指南》,开发者不仅可以理解多线程的基本概念,还能掌握如何在实际项目中运用多线程技术,提升程序的并发性能和稳定性。无论是初级开发者还是经验丰富的工程师,这本书都是一本值得阅读...

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程完全概念题

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了代码的并发性和效率。在面试中,了解并掌握多线程的基本概念和技术是至关重要的。以下是一些关于Java多线程的关键知识点: 1. **线程同步**...

    Java 多线程 PPT

    Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、线程类和接口的使用,以及线程的同步与互斥。 首先,我们需要理解进程与...

    武汉理工大学Java多线程实验源码

    Java多线程是Java编程中的核心概念,尤其在并发编程领域有着重要的地位。这个实验源码来自武汉理工大学的大二上学期Java课程,旨在帮助学生深入理解并实践Java的多线程技术。 首先,我们来看看“CTExp01”到“CTExp...

    Java多线程英文版

    ### Java多线程编程知识点详解 #### 一、引言 在现代软件开发中,多线程编程是一项不可或缺的技术,尤其是在高性能和响应性要求较高的应用中。Java作为一种广泛使用的编程语言,提供了强大的多线程支持。本文将...

    java 多线程示例

    Java多线程是Java编程中的重要概念,尤其在开发高性能、高并发的应用中不可或缺。本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要...

    Java多线程编程技术

    《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...

Global site tag (gtag.js) - Google Analytics