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

java同步机制

阅读更多
基本概念:
每个Object都会有1个锁.
同步就是串行使用一些资源.

(说明:以下有些例子为了突出重点,省略了不必要的代码.特别是省掉了一些成员变量,就是需要同步的对象.)

1. 多线程中对共享、可变的数据进行同步.
对于函数中的局部变量没必要进行同步.
对于不可变数据,也没必要进行同步.

多线程中访问共享可变数据才有必要.


2. 单个线程中可以使用synchronized,而且可以嵌套,但无意义.
class Test {
public static void main(String[] args) {
Test t = new Test();
synchronized(t) {
synchronized(t) {
System.out.println("ok!");
}
}
}
}

3. 对象实例的锁
class Test{
public synchronized void f1(){
//do something here
}

public void f2(){
synchronized(this){
//do something here
}
}
}

上面的f1()和f2()效果一致, synchronized取得的锁都是Test某个实列(this)的锁.
比如: Test t = new Test();
线程A调用t.f2()时, 线程B无法进入t.f1(),直到t.f2()结束.

作用: 多线程中访问Test的同一个实例的同步方法时会进行同步.

4. class的锁
class Test{
final static Object o= new Object();

public static synchronized void f1(){
//do something here
}

public static void f2(){
synchronized(Test.class){
//do something here
}
}

public static void f3(){
try {
synchronized (Class.forName("Test")) {
//do something here
}
}
catch (ClassNotFoundException ex) {
}
}


public static void g(){
synchronized(o){
//do something here
}
}
}

上面f1(),f2(),f3(),g()效果一致
f1(),f2(),f3()中synchronized取得的锁都是Test.class的锁.

g()是自己产生一个对象o,利用o的锁做同步
作用: 多线程中访问此类或此类任一个实例的同步方法时都会同步. singleton模式lazily initializing属于此类.



分享到:
评论

相关推荐

    Java同步机制浅谈

    ### Java同步机制浅谈 #### synchronized关键字的作用及应用 在Java多线程环境中,`synchronized`关键字扮演着至关重要的角色。它可以帮助开发者确保多线程环境下的数据一致性,防止因并发访问导致的数据错误。本...

    深入学习Java同步机制中的底层实现

    Java同步机制是多线程编程中确保数据一致性与正确性的关键。在Java中,主要有两种同步机制:内置的`synchronized`关键字以及基于`java.util.concurrent`包中的高级同步工具类。本文将深入探讨这些机制的底层实现,...

    同步机制(JAVA)

    3. **Java同步机制** - **synchronized关键字**:Java中的`synchronized`关键字用于实现线程同步,它可以修饰方法或代码块。当一个线程进入`synchronized`区域时,其他线程必须等待,直到该线程完成执行。 - ** ...

    java 同步机制总结java 同步机制总结

    java 同步机制总结java 同步机制总结

    java同步(一个网页)

    Java同步机制的选择取决于具体的需求和性能考虑。在处理高并发问题时,合理地使用这些同步工具能帮助我们编写出高效且安全的多线程程序。在阅读提供的"JAVA同步"网页内容时,可以深入理解这些概念并学习如何在实际...

    Java同步线程模型分析与改进

    ##### 2.2 Java同步机制的局限性 Java语言提供了一系列用于同步的机制,如`synchronized`关键字、`wait()`和`notify()`等方法。尽管这些机制在一定程度上能够满足基本的同步需求,但在实际应用中存在以下局限性: ...

    基于同步机制解决Java多线程安全问题的应用 (1).zip

    二、Java同步机制概述 Java提供了多种同步机制来防止这些问题,主要包括以下几种: 1. synchronized关键字:用于方法或代码块,确保同一时间只有一个线程可以执行特定的代码。synchronized方法或代码块确保了互斥性...

    同步代码块(synchronized).zip

    在Java编程语言中,同步代码块(synchronized blocks)是一种重要的多线程控制机制,用于保证线程安全,防止数据的不一致性。本压缩包包含了两个示例代码——Example12.java和Example13.java,它们是针对同步代码块...

    java中线程同步方法

    #### Java同步机制概述 Java为解决线程同步问题提供了丰富的工具和方法: 1. **wait方法**:此方法允许当前线程暂停执行并释放锁,直到被另一个线程唤醒。调用wait方法时,必须在`synchronized`代码块内进行,且...

    java锁机制Synchronizedjava锁机制Synchronized

    Java 锁机制 Synchronized 是 Java 语言中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。 Java 锁机制 Synchronized 的概念 在 Java 中,每个对象都可以被看作是一个大房子,其中有多个...

    Java多线程同步机制研究分析.pdf

    Java多线程同步机制研究分析 Java多线程同步机制是Java编程语言中的一种机制,它允许多个线程同时执行,提高了系统资源的利用率和安全性。但是,多线程中最重要的问题是线程的同步和共享资源的访问保护。本文通过对...

    java+多线程+同步详解Java源码

    二、Java同步机制 1. **synchronized关键字** - `synchronized`可以修饰方法或代码块,用于控制对共享资源的访问,防止数据不一致。 - 修饰实例方法时,锁住的是对象实例。 - 修饰静态方法时,锁住的是类的Class...

    java同步

    总结,Java同步机制是保证多线程环境下数据一致性的重要手段。正确理解和运用synchronized、Lock、并发工具类等技术,可以有效地解决并发编程中的各种问题,提高程序的性能和可靠性。在实际开发中,应根据具体需求...

    java的线程同步机制synchronized关键字的理解_.docx

    Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...

    Java多线程同步机制的应用分析.pdf

    "Java多线程同步机制的应用分析" Java多线程同步机制的应用分析是指在Java语言中,如何使用同步机制来保护临界区,以避免多线程之间的冲突和错误。该机制通过管程机制和同步语法来保护临界区,使得多线程可以安全...

    Java多线程同步问题分析.pdf

    Java虚拟机(JVM)提供了多种机制来解决这个问题,包括 synchronized 关键字、wait() 和 notify() 方法、Lock 接口以及相关的实现如 ReentrantLock,这些机制都是Java同步机制的一部分。 1. synchronized 关键字:...

    深入探索Java中的同步机制:同步代码块与同步方法详解

    Java提供了两种主要的同步机制:同步代码块和同步方法。这两种机制都可以用来防止多个线程同时访问同一段代码,但它们的使用方式和应用场景有所不同。本文将详细探讨Java中的同步代码块和同步方法的区别,包括它们的...

    java同步网络时间

    Java同步网络时间是一个常见的任务,尤其对于需要时间精确性的应用来说非常重要。这个任务可以通过Java的NTP(Network Time Protocol)库来实现。NTP是一种互联网协议,用于在计算机之间同步时间,确保网络上的设备...

    Java同步与异步.pdf

    Java同步与异步 Java同步与异步是Java编程中非常重要的概念,它们都是为了解决多线程环境中的线程安全问题。在多线程环境中,如果没有正确的同步机制,多个线程可能会同时访问共享资源,导致数据不一致和其他严重...

    java 线程同步 信号量控制同步

    线程同步机制是 Java 编程中的一种重要机制,用于控制多个线程之间的资源访问顺序,以避免线程之间的冲突和数据不一致。开发者需要牢牢记住线程同步的四点要素,即线程同步就是线程排队,共享资源需要同步,变量需要...

Global site tag (gtag.js) - Google Analytics