`
leo_dream
  • 浏览: 133544 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java的线程安全四种方式五个等级

    博客分类:
  • java
阅读更多

 转载自:http://dev.csdn.net/article/33/33874.shtm

四种方式    sychronized关键字

  1. sychronized method(){}
  2. sychronized (objectReference) {/*block*/}
  3. static synchronized method(){}
  4. sychronized(classname.class)

其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁
要注意的是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronized,那么只要有两个线程共享一个该类的reference,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。锁的3和4类推,即该类的不同reference调用了sychronized区段的咚咚就会受类锁的控制

还有,如果两个函数调用的先后顺序不能被打断,那么可以有个专门的锁对象来完成这个任务:
class MyLock
{
      synchronized getLock()
      {
          //####还没写完
      }
}

 

五个等级   参见effective java  Item 52 : Document thread safety

 

  1. immutable   不可变对象
  2. thread-safe 线程安全的,可以放心使用,如java.util.Timer
  3. conditionally thread-safe 条件线程安全的,如Vector和Hashtable,一般是安全的,除非存在几个方法调用之间的顺序不能被打断,这时可以用额外的锁来完成
  4. thread-compatible 可以使用synchronized (objectReference)来协助完成对线程的调用
  5. thread-hostile 不安全的

 

wait & notifyAll

 

在循环中使用wait 使用notifyAll而不是notify

 

pipe

 

java中也有pipe的,四个类:PipedInputStream, PipedInputReader, PipedOutputStream, PipedOutputWriter 下面是一段生产者消费者的代码(摘自core javaII):

    /* set up pipes */
    PipedOutputStream pout1 = new PipedOutputStream();
    PipedInputStream pin1 = new PipedInputStream(pout1);
    PipedOutputStream pout2 = new PipedOutputStream();
    PipedInputStream pin2 = new PipedInputStream(pout2);
    /* construct threads */
    Producer prod = new Producer(pout1);
    Filter filt = new Filter(pin1, pout2);
    Consumer cons = new Consumer(pin2);
    /* start threads */
    prod.start(); filt.start(); cons.start();

 

注意

 

long 和double是简单类型中两个特殊的咚咚:java读他们要读两次,所以需要同步

分享到:
评论

相关推荐

    Java并发中的线程安全性

    Joshua Bloch在其著作《Effective Java》中提出了一种线程安全性等级的概念,将线程安全性分为以下几个等级: 1. **线程安全(Thread-Safe)**:即使没有外部同步机制,也可以在多线程环境下正确工作。 2. **可重入...

    java集合类线程安全.doc

    本文将结合上述 Bloch 关于线程安全等级的定义,对 Java 集合框架中的集合类进行线程安全性分析,并指出各个集合类在现实的编程环境中需要注意的并发编程的陷阱;同时对集合框架中通用算法对线程安全性的影响进行...

    Java线程安全基础概念解析

    Java线程安全基础概念解析是Java编程语言中一个非常重要的概念,涉及到多线程编程、同步控制、线程安全等方面。了解Java线程安全基础概念可以帮助开发者编写更加高效、可靠的多线程程序。 一、线程安全的定义 线程...

    Java——多线程编程技术.pdf

    Java多线程编程技术的关键词包括Java、多线程、线程调度、死锁、线程安全等。 Java多线程编程技术的应用非常广泛,例如网络编程、数据库编程、图形用户界面编程等。在Java中,多线程编程技术是通过Thread类和...

    基于JAVA的安全性改造与验证的研究

    例如,对于赋值语句"V=A",编译器会生成类似以下的代码:“if SC(A) >= SC(V)”以确保信息从较低的安全等级向较高的安全等级流动。 #### 五、sJAVA的安全执行条件 为了确保sJAVA程序的安全执行,需要对各种语句的...

    Java集合框架的线程安全.docx

    在 Java 集合框架中,每个集合类都有其特定的线程安全等级,对于不同的线程安全等级的集合类,需要采取不同的并发编程策略。例如,对于非可变的集合类,可以在多线程环境下安全地共享,而不需要额外的同步。对于线程...

    JAVA计算机等级考试习题

    这个名为“JAVA计算机等级考试习题”的资源包含了八套完整的习题,涵盖了二级考试的主要知识点,对于考生来说是一份宝贵的参考资料。 首先,我们来深入探讨一下JAVA编程的基础知识,这是所有等级考试的基石。基础...

    全国计算机等级考试二级JAVA语言五年真题

    全国计算机等级考试二级Java语言是针对计算机编程能力的权威评估,尤其对于初学者和在校大学生而言,这是一个重要的考试。此资源包含2005年至2009年的五年真题,旨在帮助考生熟悉考试格式,了解题型,并通过实践提升...

    全国计算机等级考试历年真题必练二级JAVA上机模拟软件

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)开发,因其跨平台性、高效性和安全性而备受青睐。在二级JAVA考试中,考生需要掌握Java的基础语法,包括类、对象、接口、继承、...

    全国计算机等级考试二级JAVA上机模拟系统

    全国计算机等级考试二级Java上机模拟系统是一款专为备考全国计算机等级考试的考生设计的实践训练平台。这个系统旨在帮助考生熟悉Java编程语言,并通过模拟真实考试环境来提高他们的编程能力、问题解决能力和应试技巧...

    计算机等级考试练习系统 二级JAVA

    这个"计算机等级考试练习系统 二级JAVA"正是为备考者提供的一套专业训练工具。 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)于1995年发布。它的设计目标是具有...

    2006年9月计算机等级考试二级 JAVA笔试真题及答案

    Java是面向对象的编程语言,二级计算机等级考试中的Java笔试主要考察以下几个核心领域: 1. **基础语法**:这包括变量、数据类型、运算符、控制结构(如if语句、for循环、while循环)以及方法的定义与调用。例如,...

    java打地鼠游戏

    - **EventDispatchThread (EDT)**: Java Swing的所有用户界面更新都应在EDT上进行,确保界面更新的同步和线程安全。 ### 四、事件处理 - **ActionListener**: 为每个JButton添加监听器,当玩家点击按钮时触发相应的...

    全国计算机等级考试-二级教程-Java语言程序设计(2008年版)

    《全国计算机等级考试-二级教程-Java语言程序设计(2008年版)》是针对我国计算机等级考试中Java语言编程部分的一本权威教材。这本书以清晰易懂的方式介绍了Java编程的基础知识,旨在帮助考生顺利通过考试。下面将...

    全国等级考试二级Java复习资料

    - Java具有简单性、面向对象、平台无关性、多线程、分布式、安全性、高性能、可靠性、解释性和自动垃圾回收等特点。 - **平台无关性**:这意味着Java程序无需修改即可在不同操作系统上运行。这种特性依赖于Java...

    java程序员等级图

    Java程序员等级图是指导开发者职业发展的重要参考,它通常涵盖了从初学者到高级专家的不同阶段,每个阶段都对应着特定的技能集和技术要求。在Java编程领域,程序员的成长路径可以分为多个等级,如初级程序员、中级...

    全国计算机等级考试二级教程--Java语言程序设计必杀秘诀.pdf

    Java语言是一种广泛使用的高级编程语言,尤其在互联网和企业级应用中占据重要地位。全国计算机等级考试二级教程针对Java语言程序设计,旨在帮助考生全面掌握Java的基础知识和技能。以下是根据教程大纲和部分内容提炼...

    全国计算机等级考试二级Java语言程序设计考试大纲

    - **特点**:Java是一种面向对象、跨平台、安全可靠的编程语言。它具有简单性、面向对象、分布式、健壮性、安全性、可移植性、解释执行等特点。 - **实现机制**:Java程序通过编译器被转化为字节码(.class文件),...

    计算机等级考试二级Java练习题及解析(4)

    计算机等级考试二级Java练习题及解析主要涵盖编程基础、数据结构、软件工程、数据库管理和Java语言特性等多个方面。以下是对这些知识点的详细说明: 1. **空间复杂度**:算法的空间复杂度描述了执行过程中所需的...

    全国计算机等级考试二级Java语言程序设计考试大纲201

    全国计算机等级考试二级Java语言程序设计考试大纲详细解析 在全国计算机等级考试中,二级Java语言程序设计考试大纲是考生必须掌握的核心内容。本大纲旨在帮助考生全面了解Java语言的特性和编程技巧,确保具备编写...

Global site tag (gtag.js) - Google Analytics