关于synchronized修饰的方法的问题?

synchronized修饰的方法,是只有一个线程执行该方法,假设两个对象同时调用了这个方法,算是两个线程吗?这两个对象对这个方法的操作会相互阻塞吗?

1个回答

完全两个概念吧。
@Transation 是事务注解(spring中)
synchronized 是java的关键字 线程锁,每次只能有一个线程执行该方法,如果有多个线程调用,其他的需要等待执行的完成后在执行。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java多线程(四)synchronized关键字修饰方法
在之前的博客中我们介绍了条件对象和锁对象,两者结合使用才能起到比较好的互斥与同步效果,大家可能觉得有些麻烦,有没有将两者结合起来的工具呢,有!java提供了synchronized关键字来实现线程的互斥和同步,其达到的效果相当于条件对象和锁对象结合起来的效果。synchronized关键字有两类用法,一类是修饰方法,一类是修饰代码块,这篇博客主要介绍一下synchronized关键字修饰方法时的用
synchronized 修饰的方法无法实现互斥的问题解决
模拟订票场景,总共10张票,但是有20个人想要购买,所以定义了一个订票管理类专门负责操作这10张票,当然,操作票的时候使用到了synchronized,另外定义了一个调用订票方法的线程类用于模拟想要买票的人,然后创建20个线程模拟20个人来订票。但是运行测试的结果却并没有成功模拟这10张票的售卖过程,原因和处理分析如下。
synchronized修饰static方法与非static方法的区别
当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例)当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象)
Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
前言 在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchronized 的方式,还有 lock,condition,volatile,threadlocal,atomicInteger,cas等方式。 synchronized 用法 它的修饰
synchronized修饰方法和修饰方法块(二)
synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。   1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:   public synchronized void accessVal(int newVal);   synchronized 方法控制
java synchronized修饰方法和修饰方法块
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronized(
带有Synchronized修饰的方法与普通方法在一个类中执行线程
public class Test implements Runnable { int b = 100; public synchronized void m1() throws Exception { b = 1000; Thread.sleep(5000); System.out.println("b=" + b); } public void m2() { Sys
synchronized修饰静态方法和普通方法有什么区别
在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。 在static方法前加synchronizedstatic:静态方法属于类方法,它属于这个类,获取到的锁,是属于类的锁。 在普通方法前加synchronizedstatic:非static方法获取到的锁,是属于当前对象的锁。
synchronized修饰方法和修饰方法块(-)
synchronized关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。二、然而,当一个线程访问object的一个synchronized(th
synchronized的修饰方法和修饰代码块区别
文章思路 哪些概念难理解 类锁和对象锁区别 类锁所有对象一把锁 对象锁一个对象一把锁,多个对象多把锁 同步是对同一把锁而言的,同步这个概念是在多个线程争夺同一把锁的时候才能实现的,如果多个线程争夺不同的锁,那多个线程是不能同步的 两个线程一个取对象锁,一个取类锁,则不能同步 两个线程一个取a对象锁,一个取b对象锁,则不能同步 文章关键内容: 什么是锁 锁有几种 什么是synchroni...
Java Synchronized修饰静态方法普通方法和代码块
Class A {     public synchronized methodA() {//对当前对象加锁     }     public  methodB() {                synchronized(this){}//对当前对象加锁,与methodA用法相同     }     public static synchronized methodC()
synchronized修饰方法到底锁住的是什么
本文参看http://blog.csdn.net/shenshibaoma/article/details/53009505 我们先给出本文的结论,synchronized修饰方法锁住的是对象的本身,也是this。 下面我们通过代码来验证。 public class Test164 { public static void main(String[] args) { MyThr
synchronized与static synchronized 的区别以及synchronized继承问题
1.synchronized与static synchronized 的区别       synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这种约束了。那么static synchronized恰好就是要控制类的所有实例的访问了,static synchronized是限制线程同
【java】synchronized修饰静态方法和非静态方法的区别
synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。 public class StaticSynDemo { private static String a="test"; //等同于方法print2 public synchronized void print1(String b){ //调用前要取得StaticSynDe
java中synchronized修饰的方法或代码块和static synchronized修饰方法或代码块的区别
例如:现在有两个方法 public class MyService { synchronized public void methodA() throws InterruptedException { System.out.println("start methodA ~~~~"); Thread.sleep(2000); System
Java中synchronized 修饰在 static方法和 非static方法的区别
Java中synchronized是用来表示同步的,synchronized可以用来修饰一个方法(static方法和非static方法),也可以用来修饰一段代码块; 修饰实例方法: public synchronized void x() throws InterruptedException { for (int i = 0; i < 5; i++) {
java多线程(五)synchronized关键字修饰代码块
在上一篇博客中我们介绍了
synchronized 关键字可修饰 object和方法
 原文转自: http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一
一张图讲解对象锁和关键字synchronized修饰方法(代码块)
每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁,这个方法就可以进行同步,在多线程的时候,不会出现线程安全问题。 注:Monitor是 Java中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或者 Class的锁。每一个对象都有,也仅有一个 Monitor。
关于对java中synchronized修饰同一个类的两个方法的理解
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;...
synchronized修饰变量
关于synchronized的初步使用,大家看拙作 http://blog.csdn.net/dlf123321/article/details/42373451 即可 不过今天,有个朋友问我,如果用synchronized修饰一个类的成员变量会怎么样? 咱们看下面的代码 package thread; public class ThreadTestffd { pr
Java中一个类里面有两个用synchronized修饰的非静态方法,不同的线程中的实例访问这两个方法时会发生什么?
首先这个问题涉及到的是Java的对象锁。 java的对象锁和类锁:java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有
synchronized关键字修饰方法
转载请注明出处:http://blog.csdn.net/xingjiarong/article/details/47907237 在之前的博客中我们介绍了条件对象和锁对象,两者结合使用才能起到比较好的互斥与同步效果,大家可能觉得有些麻烦,有没有将两者结合起来的工具呢,有!Java提供了synchronized关键字来实现线程的互斥和同步,其达到的效果相当于条件对象和锁对象结
java中使用synchronized进行修饰锁定的必须是公用的资源,否则还是存在并发问题
在java中,原来以为用synchronized修饰的方法在任何情况下应该都是单并发执行的,后来经过测试表明这个方法必须是公用的,因为synchronized锁定的对象而不是对象的方法,所以如果这个对象不是公用的,那么即使加了synchronized方法也是没有用的。 1.这里有一个类,它负责创建100个线程并启动他们 /* * ©2002-2016 ****, Inc. All right
synchronized修饰普通方法,修饰静态方法比较
转自:https://www.cnblogs.com/yanghuahui/p/3365922.html一、synchronized修饰普通方法初始化一个对象时,会自动生成一个与该对象对应的对象锁,于是该对象内部的被synchronized 修饰的方法就得依靠对象锁工作。当多线程同时访问某个被synchronized修饰的方法时,一旦某个进程抢得对象锁之后,其他的进程只有排队对待。例如,Person
synchronized方法和代码块的理解
熟悉 Java 的多线程的一般都知道会有数据不一致的情况发生,比如两个线程在操作同一个类变量时,而保护数据不至于错乱的办法就是让方法同步或者代码块同步。同步时非原子操作就得同步,比如一个简单的 1+1 运算也该同步,以保证一个代码块或方法成为一个原子操作。 对于给在多线程环境中可能会造成数据破坏的方法,做法有两种,以及一些疑问 1. 当一个线程访问了对象的synchronized或
Java中Synchronized修饰不同位置的用法
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是
Java语言中synchronized 修饰在 static方法和 非static方法的区别
【问题描述】关于Java中synchronized 用在实例方法和对象方法上面的区别 【问题分析】大家都知道,在Java中,synchronized 是用来表示同步的,我们可以synchronized 来修饰一个方法(实例方法和类方法---注:不知道这样叫准确不准确,大家理解我的意识就行了)。也可以synchronized 来修饰方法里面的一个语句块。 修饰实例方法: public sync
多线程下synchronized修饰static方法与非static方法的区别
一直对多线程的概念比较模糊,今天就写了个关于变量原子操作的小程序,好让自己加深一下理解 代码如下: package atomic; public class JoinThread extends Thread { public static int i = 0; //public static AtomicInteger atomicInteger = new AtomicInteg
synchronized修饰符的几点说明
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17199201       在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。    
Java synchronized 非静态方法 静态方法的区别
package yi.test01; /** * @author yangwl * * * synchronized作用于静态方法和非静态方法的区别: * 非静态方法: * 给对象加锁(可以理解为给这个对象的内存上锁,注意 只是这块内存,其他同类对象都会有各自的内存锁),这时候 * 在其他一个以上线程中执行该对象的这个同步方法(注意:是该对象)就会产生互斥 *
synchronized同步三种使用方法
1.同步代码块 synchronized (对象){ //代码块 }上面的对象可以是任意对象,但必须为同一对象 2.同步函数 synchronized void method(){ //代码 }同步方法使用的同步对象为该方法所属类本身,即this 3.同步静态方法 synchronized static void method(){ //代码 }
java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
转载自:http://www.cnblogs.com/yanghuahui/p/3365922.html synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制。synchronized关键字用于保护共享数据。 synchronized实现同步的机制:synchronized依靠"锁"机制进行多线程同步,"锁"
Synchronized(对象锁)和Static Synchronized(类锁)的区别
Synchronized和Static Synchronized区别 通过分析这两个用法的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchroniz
synchronized的四种用法
一  修饰一个方法 Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来的范围,而修饰方法范围是整个函数。 例如: 方法一 public synchronized void method() { // todo }方法二 public v
synchronized底层如何实现的?用在代码块和方法上有什么区别?
关于java类中的方法加上synchronized修饰
在一个类的不同方法中,所有方法共用的是一个信号量。 在两个不同的方法上加上synchronized修饰,表示这两个方法共用一把锁,即共用一个信号量。这样就可以使加上synchronized的两个方法互斥!
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)synchronized用法synchronized修饰的对象有几种: 修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象; 修饰一个方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 修饰一个静态的方法:其作用的范围是整个方法,作用的
synchronized修饰函数和封装变量的对象两处需要注意的地方
今天学习synchronizedgu
synchronized run()方法的问题
昨天在看线程编程的时候,想到了了一个问题,就是给run方法加上synchronized能实现同步吗,所以就写了如下代码: public class MyThread extends Thread { @Override public synchronized void run() { // TODO Auto-generated method stub for(int i=0;
Synchronized同步静态方法和非静态方法总结
1.Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。        Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。 情况1:同一个
Java基础之《synchronized关键字用在方法和代码块上的区别》
在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。问题的由来:看到这样一个面试题://下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized (...
Java中Synchronized的用法
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3.修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 4..
synchronized字段总结
public class Test { public void a() { synchronized (this) { for (int i = 0; i < 5; i ++) { Log.d(TAG,Thread.currentThread().getName() + ":" + i);
java中synchronized修饰代码块(两种创建线程的方式讲解卖票程序)
格式: synchronized(类对象名 aa) { //同步代码块 } 功能: synchronized(类对象名 aa)的含义是:判断aa是否已经被其他线程所霸占,如果发现已经被其他线程霸占,则当前线程陷入等待中,如果发现aa没有被其他线程霸占,则当前线程霸占住aa对象,并执行同步代码块,在当前线程执行同步代码块时,其他线程将无法 再执行同步代码块(因为当前线程已经霸占了a
java接口不能声明为synchronized
/** * 任务完成 * @param task */ public synchronized void onTaskFinished(DownloadTask task);
abstract为什么不可以用static native或synchronized修饰
public abstract synchronized void m4(); public abstract native void m2(); public abstract static void m1(); public static final void m3(){}; abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。 sta
synchronized关键字加到static静态方法和非static静态方法区别
synchronized关键字加到static静态方法上是给Class类上锁 而加到非static静态方法是给对象加锁 为了验证不是同一个锁 验证代码如下package com.test.Thread.t10;/** * @author admin * 2017年4月20日 */ public class Service { synchronized public static
synchronized用于静态方法和普通方法区别
所有的非静态同步方法用的都是同一把锁——实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步方法必须等待获取锁的方法释放锁后才能获取锁,可是别的实例对象的非静态同步方法因为跟该实例对象的非静态同步方法用的是不同的锁,所以毋须等待该实例对象已获取锁的非静态同步方法释放锁就可以获取他们自己的锁。 而所有的静态同步方法用的也是同一把锁——类对象本身,这两把锁是两个
thread07 - 同步方法中调用同步方法
package com.neutron.t07; import java.util.concurrent.TimeUnit; /** * 问题:一个线程是否是否可以调用另一个同步方法呢? */ public class T07 { public static synchronized void set2() { get2(); System.out
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问