同步的概念:同步分为
同步方法和
同步块两种方式。
锁定的内容分为
锁定类的某个特定实例和
锁定类对象(类的所有实例)
变量分为
实例变量(不带static的变量)和
类变量(带static的变量)
使用同步的原因
1、在系统中对访类要使用多线程进行访问;
2、在该类中有 类变量,或者是 在类的方法中有访问公共资源(如一个外部文件的读写)。
同步锁锁定的内容是什么?
无论你将Synchronized加在方法前还是加在一个变量前,其锁定的都是一个 类对象。每一个对象都只有一个锁与之相关联。
下例中分情况的列举各种情况下的同步效果
1、
Synchronized 加在方法上,(同步方法,锁定类实例)
Java代码
public class Demo1 {
public synchronized void m1(){ //……
}
public void m2(){ //……
synchronized(this){ //……
} //……
}
}
这两种写法的效果是一样的,
锁定的都是类实例对象。
如果有一个 类实例对象: demo = new Demo1(),另外有两个线程: thread1,thread2,都调用了demo 对象,那么,在同一时间,如果 thread1调用了demo.m1(),则thread2在该时间内不能访问demo.m1() 和 demo.m2(); 因为thread1把demo这个对象的锁使用了,所以无法分给其它线程使用
但是,如果thread1调用 demo1.m1(),thread2调用 demo2.m1(),则可以同时进行,因为它们调用的是不同的Demo1类对象实例。
2、
Synchronized 加在变量上,(同步块,锁定类实例)
Java代码
public class Demo2 {
Object a = new Object();
Object b = new Object();
public void m1(){
//……
synchronized(a){
//……
}
//……
}
public void m2(){
//……
synchronized(b){
//……
}
//……
}
}
这种情况下,是实现代码块锁定,锁定的对象是 变量a或b;(注意,a 、b 都是非static 的)
如果有一个 类实例对象:demo = new Demo2(),另外有两个线程:thread1,thread2,都调用了demo对象,那么,在同一时间,如果 thread1调用了demo.m1(),则thread2在该时间内可以访问demo.m2();但不能访问 demo.m1()的同步块,因为a被 thread1锁定了。
3、
Synchronized锁定的是类变量 ,即static变量(可能是属性,可能是方法)(锁定类对象)
分享到:
相关推荐
总结起来,Java多线程同步是通过`synchronized`关键字实现的,它可以应用于方法或代码块,保证同一时刻只有一个线程能够执行特定的代码。通过合理使用同步机制,开发者可以有效地管理并发程序中的资源访问,避免数据...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
Java中的多线程同步是一种控制并发访问共享资源的方式,以防止数据不一致和线程冲突。锁机制是Java实现同步的主要手段,其中synchronized关键字扮演了核心角色。 synchronized可以用于修饰方法或代码块,两者在锁的...
通过具体的代码实现,我们将深入理解Java中的线程同步机制,并学习如何在实际编程中正确地使用这些机制。 #### 二、核心概念与原理 ##### 1. Java线程基础 Java中的线程是程序执行的基本单位,每个线程有自己的...
线程同步是多线程编程中的关键概念,...总的来说,线程同步是Java多线程编程中不可或缺的一部分,正确理解和使用同步机制能确保程序在并发环境下的正确性和高效性。在面试中,理解并能熟练应用这些知识点是非常重要的。
本文将深入解析Java多线程,帮助你快速掌握这一关键技能。 首先,我们要明白什么是线程。线程是操作系统调度的基本单位,每个线程都有自己的程序计数器、栈、局部变量和状态,它们共享同一块内存空间,即进程的内存...
总结来说,`synchronized`关键字在Java多线程编程中扮演着关键角色,确保了线程安全和数据一致性。然而,正确理解和使用它是至关重要的,避免滥用并结合其他并发控制手段,才能编写出高效且健壮的多线程程序。在实际...
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
本文将深入探讨Java多线程的各个方面,包括基础知识、创建线程、线程同步与通信、死锁问题以及线程池。 1. **基础知识** - **线程与进程**:线程是操作系统分配CPU时间的基本单位,而进程是系统中运行的程序实例。...
这份“Java多线程的经典资料.rar”压缩包包含了一份名为“Java线程.pdf”的文档,很可能是关于Java多线程的详细教程或深入解析。 在Java中,多线程主要涉及以下几个关键知识点: 1. **线程创建**:Java提供了多种...
在深入探讨Java多线程程序设计之前,我们需要了解多线程的概念以及它在程序设计中的重要性。多线程是指一个进程内部可以同时执行多个线程,每个线程负责处理程序中的不同部分。在Java中,线程由java.lang.Thread类来...
本资源提供了详细的Java多线程设计模式的解析,包括源码分析,帮助开发者深入理解并熟练应用这些模式。 在多线程环境中,设计模式是解决常见问题的最佳实践,它们可以帮助开发者创建高效、可维护的并发代码。以下是...
Java多线程与同步是Java编程中的核心概念,它们在构建高效、响应迅速的应用程序时起着至关重要的作用。在大型系统开发中,多线程技术使得程序能够同时执行多个任务,提高系统的并发性,而同步机制则确保了在多线程...
本文将深入解析Java多线程下载文件的关键技术和实现细节。 #### 一、Java多线程下载原理 多线程下载的核心思想是将一个大文件分割成多个小的部分,每个部分由一个独立的线程进行下载,最后将这些部分合并成完整的...
本文将深入探讨Java多线程的基础概念、基本原理及其在实践中的应用。 #### 二、核心概念 - **进程**: 是操作系统中的一个独立执行单元,拥有自己的内存空间。在多任务操作系统中,可以同时运行多个进程。 - **线程*...
下面是对Java多线程学习的详细解析。 1. **多线程概述**: 多线程是指一个程序内可以同时执行多个独立的执行流,每个执行流被称为一个线程。Java通过Thread类来代表线程,每个线程都有自己的生命周期,包括新建、...
在深入探讨Java线程同步调用这一主题之前,我们首先需要理解线程同步的基本概念及其在多线程环境中的重要性。线程同步是多线程编程中的一个关键概念,它确保了多个线程在访问共享资源时不会发生冲突,避免了数据不...
本文将深入探讨如何使用JNI实现多线程同步,并通过源码来解析这一过程。 1. **JNI基础知识** JNI为Java程序员提供了一种方式,可以在Java代码中调用本地方法,反之亦然。它定义了一系列的函数,例如`FindClass`...