Obj
package com.james.thread.sync; public class SyncObject { byte[] lock1 = new byte[0]; byte[] lock2 = new byte[0]; int i = 1; public int minus() { try { synchronized (lock1) { System.out.println("minus in"); Thread.currentThread().sleep(300); i--; System.out.println("minus " + i); } } catch (InterruptedException e) { e.printStackTrace(); } return i; } public int add() { synchronized (lock2) { try { System.out.println("add in"); Thread.currentThread().sleep(5); i++; System.out.println("add " + i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return i; } } public synchronized int minus2() { i--; System.out.println("minus "+ i); return i; } public synchronized int add2() { i++; System.out.println("add "+ i); return i; } }
Test
package com.james.thread.sync; public class Test { public static void main(String[] args) throws InterruptedException { SyncObject obj = new SyncObject (); Thread t =null; for(int i =1;i<3;i++){ t = new Thread(new TestThread (i,obj)); t.start(); } // Thread.currentThread().sleep(500); // System.out.println(obj.i); } static class TestThread implements Runnable { private int flag = 100; private SyncObject obj; public TestThread(int flag,SyncObject obj){ this.flag = flag; this.obj = obj; } public void run (){ if(flag %2 == 0){ obj.add(); }else{ obj.minus(); } } } }
输出
minus in add in add 2 minus 1
说明 synchronized块锁住不同对象的时候,同步块里是不会阻塞的。
相关推荐
Java synchronized锁住的对象解析 在Java编程中,synchronized关键字是用于同步的关键字,它可以用于锁住一个对象,以实现线程同步。但是,在使用synchronized关键字时,需要了解锁住的到底是哪个对象,否则可能...
本文将深入探讨`synchronized`关键字的用法,包括类锁、对象锁、方法锁以及它们之间的关系。 **类锁(Class Lock)** 类锁是通过类的Class对象实现的,当一个线程访问类的静态 synchronized 方法或同步代码块时,就...
通过使用synchronized关键字,可以锁住当前对象的当前方法,使得其他线程访问该对象的synchronized方法或者代码块阻塞,但并不会阻塞非synchronized方法。 在多线程中,脏读是一个常见的概念。当多个线程对同一个...
Java 中 Synchronized(对象锁)和 Static Synchronized(类锁)的区别 Synchronized 和 Static Synchronized 是 Java 中两种同步机制,它们都用于解决多线程并发访问的安全问题。然而,它们之间存在着本质的区别。...
同时,Synchronized 代码块也可以在一定时期内霸占某个对象的钥匙,避免其他线程访问该对象的上锁房间。 Synchronized 的使用原则 Synchronized 的使用原则是“随用随借,用完即还”。但是,在某些情况下,可能...
首先,我们需要理解synchronized锁住的是对象,而不是代码块。例如,当我们使用`synchronized (o)`对一个对象o进行加锁时,实际上是对o这个对象本身进行锁定,而不是对包围的代码块。这个过程通过修改对象的内部状态...
在Objective-C中,当你使用`@synchronized`块包围一段代码时,会为指定的对象创建一个互斥锁。如果当前线程已经持有了该锁,那么它可以再次获取并执行内部的代码,而不会造成死锁。这种特性使得在嵌套使用`@...
首先需要知道的是,Synchronized锁在JVM中实现了从低到高的不同锁级别,包括无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。锁的升级并不是随意进行的,而是根据锁的竞争情况逐步升级的。 偏向锁是一种优化...
总结来说,`synchronized`锁机制在Java中通过多种方式实现了线程同步,包括自旋锁、自适应自旋锁、轻量锁和偏向锁,这些机制在不同程度上减少了锁的开销,提高了并发性能。在实际编程中,了解这些机制有助于编写出...
本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...
标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`synchronized`关键字创建互斥锁,确保同一时间只有一个线程可以访问特定的代码块或方法。 描述中的"一个多线程访问的同...
在Java中,synchronized关键字是用来控制线程同步的,是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。Synchronized既可以对代码块使用,也可以加在整个方法上。 关键是,不要认为给方法或者...
"基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用效率,但也容易造成线程不安全、线程死锁等问题。Java synchronized同步锁可以保证同一时刻只有一个线程操作同一资源,使用wait()、notify()...
Java中的`synchronized`关键字是实现线程安全的关键机制,它基于Java对象头的Mark Word进行锁的状态管理。Mark Word是一个动态变化的数据结构,用于存储对象的HashCode、分代年龄、锁状态标志等信息。在32位JVM中,...
java锁机制Synchronized.pdf
synchronized() 中是锁住的对象,synchronized(this) 锁住的只是对象本身,同一个类的不同对象调用这个方法并不会被锁住,而 synchronized(className.class) 实现了全局锁的功能,全部这个类的对象调用这个方法都受...
Synchronized锁在Spring事务管理下,导致线程不安全。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或函数当作锁。每个对象只有一个锁与之相关联。实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 当 ...
* 若此对象对应的类中包含了多个 synchronized 修饰的方法或代码块,多个线程访问同一个对象的任意 synchronized 修饰的方法或代码块,只要有一个线程拥有了 synchronized 同步锁,其他线程不管想访问 synchronized ...