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

Java多线程开发十——杂七杂八

阅读更多
 
杂七杂八
 
1.ThreadLocal的应用
相当于每个线程的保管箱。存放的内容是每个线程特有的。例如在一个Web分层的架构中,可以将一个变量从前端(比如Action)传到后端(比如Service, DAO等)。
2.精灵线程/守护线程
守护线程是一类特殊的线程,它和普通线程的区别在于它并不是应用程序的核心部分,当一个应用程序的所有非守护线程终止运行时,即使仍然有守护线程在运行,应用程序也将终止,反之,只要有一个非守护线程在运行,应用程序就不会终止。守护线程一般被用于在后台为其它线程提供服务。
可以通过调用方法 isDaemon() 来判断一个线程是否是守护线程,也可以调用方法 setDaemon() 来将一个线程设为守护线程。
3. 线程组
线程组是一个 Java 特有的概念,在 Java 中,线程组是类ThreadGroup 的对象,每个线程都隶属于唯一一个线程组,这个线程组在线程创建时指定并在线程的整个生命期内都不能更改。
可以通过调用包含 ThreadGroup 类型参数的 Thread 类构造函数来指定线程属的线程组,若没有指定,则线程缺省地隶属于名为 system 的系统线程组。比如:
ThreadGroup group = new ThreadGroup(“workgroup”);
Thread t = new Thread(group, task);
t.start();
Java 中,除了预建的系统线程组外,所有线程组都必须显式创建。在 Java 中,除系统线程组外的每个线程组又隶属于另一个线程组,你可以在创建线程组时指定其所隶属的线程组,若没有指定,则缺省地隶属于系统线程组。这样,所有线程组组成了一棵以系统线程组为根的树。
Java 线程组的主要作用是对一个线程组中的所有线程同时进行操作,比如我们可以通过调用线程组的相应方法来设置其中所有线程的优先级,也可以启动或阻塞其中的所有线程。
Java 的线程组机制的另一个重要作用是线程安全。线程组机制允许我们通过分组来区分有不同安全特性的线程,对不同组的线程进行不同的处理,还可以通过线程组的分层结构来支持不对等安全措施的采用。
Java ThreadGroup 类提供了大量的方法来方便我们对线程组树中的每一个线程组以及线程组中的每一个线程进行操作,具体可以参考JDK文档。
4.读写锁
读写锁主要用于对共享数据的访问,读锁可以被读线程同时持有,而写锁是排他的。也就是说,多个读线程可以同时访问数据,同一时间只能有一个写线程访问数据,写锁对读锁也是排斥的,当写线程工作时,读线程需要等待。理论上读写锁可以提高并发性能,但实际应用过程中需要考虑读写操作的频繁性,读写锁本身的开销等。一般如果读操作比写操作频繁,读写锁应该比互斥的锁提高性能。
应用示例(代码来源于JDK文档)
class CachedData {
   Object data;
   volatile boolean cacheValid;
   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); 
   void processCachedData() {
     rwl.readLock().lock();
     if (!cacheValid) {
        // 升级读锁到写锁
        rwl.readLock().unlock();   // 必须先释放读锁来获得写锁
        rwl.writeLock().lock();
        if (!cacheValid) { // recheck
          data = ...
          cacheValid = true;
        }
        // 锁降级
        rwl.readLock().lock(); // 重新获取读锁,无须先释放写锁
        rwl.writeLock().unlock(); // 释放写锁,仍然获取读锁
     } 
     use(data);
     rwl.readLock().unlock();//释放读锁
   }
 }
 
 
分享到:
评论

相关推荐

    Java多线程之定时任务 以及 SpringBoot多线程实现定时任务——异步任务

    1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled

    java多线程教程——一个课件彻底搞清多线程

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本教程将深入讲解Java线程的相关知识,包括进程与线程的基本概念、线程的创建和启动、多线程的互斥与同步、线程...

    JAVA多线程应用——时钟

    很好的JAVA多线程实例,方便初学都学习。

    java多线程案例——未完成

    Java多线程是Java编程中的一个重要领域,它允许程序同时执行多个任务,从而提高系统效率和资源利用率。在这个未完成的案例中,我们可能正在探讨如何在Java中创建和管理线程,以及处理多线程环境下的并发问题。下面是...

    Java多线程的小例子——吃包子

    这个名为"Java多线程的小例子——吃包子"的示例,旨在帮助开发者直观地理解多线程的工作原理。下面我们将深入探讨该示例所涉及的核心知识点。 首先,多线程通常涉及到以下几个关键概念: 1. **线程(Thread)**:...

    java多线程设计模式详解(PDF及源码)

    去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的...

    Java练手小项目——多线程聊天室.zip

    在Java编程世界中,多线程是不可或缺的一部分,尤其在开发实时性、交互性强的应用时,如我们的主题“多线程聊天室”。这个实战项目旨在帮助开发者深入理解Java多线程的概念,并提供一个实际应用的场景来实践这些知识...

    深入体验Java Web开发内幕——核心基础

    Java Web开发是构建互联网应用程序的重要领域,它涵盖了服务器端编程、网页交互以及数据库管理等多个方面。本主题将深入探讨Java Web开发的核心基础知识,帮助你全面理解这一技术的内在机制。 一、Java Web 开发...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    java多线程设计

    1. 线程的创建:Java提供了两种创建线程的方式——继承Thread类和实现Runnable接口。继承Thread类可以直接创建一个新的线程类,而实现Runnable接口则可以将线程逻辑封装在任何类中,更利于代码复用。 2. 线程的启动...

    基于java的开发源码-超简单Java多线程填表源码.zip

    基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java...

    JAVA多线程练习题答案。

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

    java多线程开发

    本文主要讲述java多线程开发中线程的创建过程以及线程运行周期相关的基础知识

    Java多线程开发API

    本文主要总结了Java并发开发中常见的基础API的使用,以及他们之间区别

    Java多线程技术及其在网络编程中的应用.pdf

    本文将详细介绍Java的多线程技术,并通过一个具体的案例——多用户在线聊天室的开发——展示如何在网络编程中运用这一技术。 #### Java多线程简介 Java中的多线程机制是其一大亮点。所谓线程,是指程序执行中的一个...

    java多线程扫描器(转载)

    Java多线程扫描器的开发旨在深化对Java面向对象程序设计的理解,特别是巩固Java语言的语法规范。此项目的核心目标在于分析系统的可行性,明确开发方向,确保开发过程的合理性。它要求开发者能够精确识别系统流程,...

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....

    JAVA项目——多线程下载代码

    本项目以"JAVA项目——多线程下载代码"为主题,使用Eclipse集成开发环境进行实现,适合于Java初学者或毕业设计实践。下面我们将深入探讨相关的Java多线程下载知识点。 1. **线程基础**:在Java中,线程是程序执行的...

    java多线程导出excel(千万级别)优化

    Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...

Global site tag (gtag.js) - Google Analytics