`
k1280000
  • 浏览: 202698 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

synchronized (obj) 锁住不同的对象的话

 
阅读更多

 

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锁住的对象解析 在Java编程中,synchronized关键字是用于同步的关键字,它可以用于锁住一个对象,以实现线程同步。但是,在使用synchronized关键字时,需要了解锁住的到底是哪个对象,否则可能...

    synchronized枷锁实例

    本文将深入探讨`synchronized`关键字的用法,包括类锁、对象锁、方法锁以及它们之间的关系。 **类锁(Class Lock)** 类锁是通过类的Class对象实现的,当一个线程访问类的静态 synchronized 方法或同步代码块时,就...

    Java并发 synchronized锁住的内容解析

    通过使用synchronized关键字,可以锁住当前对象的当前方法,使得其他线程访问该对象的synchronized方法或者代码块阻塞,但并不会阻塞非synchronized方法。 在多线程中,脏读是一个常见的概念。当多个线程对同一个...

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    Java 中 Synchronized(对象锁)和 Static Synchronized(类锁)的区别 Synchronized 和 Static Synchronized 是 Java 中两种同步机制,它们都用于解决多线程并发访问的安全问题。然而,它们之间存在着本质的区别。...

    java锁机制Synchronizedjava锁机制Synchronized

    同时,Synchronized 代码块也可以在一定时期内霸占某个对象的钥匙,避免其他线程访问该对象的上锁房间。 Synchronized 的使用原则 Synchronized 的使用原则是“随用随借,用完即还”。但是,在某些情况下,可能...

    synchronized锁原理分析(一、从Java对象头看synchronized锁的状态)

    首先,我们需要理解synchronized锁住的是对象,而不是代码块。例如,当我们使用`synchronized (o)`对一个对象o进行加锁时,实际上是对o这个对象本身进行锁定,而不是对包围的代码块。这个过程通过修改对象的内部状态...

    正确使用多线程同步锁@synchronized()1

    在Objective-C中,当你使用`@synchronized`块包围一段代码时,会为指定的对象创建一个互斥锁。如果当前线程已经持有了该锁,那么它可以再次获取并执行内部的代码,而不会造成死锁。这种特性使得在嵌套使用`@...

    Synchronized_锁升级知识点总结

    首先需要知道的是,Synchronized锁在JVM中实现了从低到高的不同锁级别,包括无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。锁的升级并不是随意进行的,而是根据锁的竞争情况逐步升级的。 偏向锁是一种优化...

    synchronized锁自旋.docx

    总结来说,`synchronized`锁机制在Java中通过多种方式实现了线程同步,包括自旋锁、自适应自旋锁、轻量锁和偏向锁,这些机制在不同程度上减少了锁的开销,提高了并发性能。在实际编程中,了解这些机制有助于编写出...

    Android synchronized 测试案例

    本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...

    java 多线程synchronized互斥锁demo

    标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`synchronized`关键字创建互斥锁,确保同一时间只有一个线程可以访问特定的代码块或方法。 描述中的"一个多线程访问的同...

    Java:synchronized锁住的是代码还是对象

    在Java中,synchronized关键字是用来控制线程同步的,是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。Synchronized既可以对代码块使用,也可以加在整个方法上。  关键是,不要认为给方法或者...

    基于Java synchronized同步锁实现线程交互.pdf

    "基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用效率,但也容易造成线程不安全、线程死锁等问题。Java synchronized同步锁可以保证同一时刻只有一个线程操作同一资源,使用wait()、notify()...

    java 偏向锁、轻量级锁及重量级锁synchronized原理.docx

    Java中的`synchronized`关键字是实现线程安全的关键机制,它基于Java对象头的Mark Word进行锁的状态管理。Mark Word是一个动态变化的数据结构,用于存储对象的HashCode、分代年龄、锁状态标志等信息。在32位JVM中,...

    java锁机制Synchronized.pdf

    java锁机制Synchronized.pdf

    实例解析Java中的synchronized关键字与线程平安问题_.docx

    synchronized() 中是锁住的对象,synchronized(this) 锁住的只是对象本身,同一个类的不同对象调用这个方法并不会被锁住,而 synchronized(className.class) 实现了全局锁的功能,全部这个类的对象调用这个方法都受...

    Synchronized锁在Spring事务管理下线程不安全

    Synchronized锁在Spring事务管理下,导致线程不安全。

    16.线程的同步机制-synchronized同步方法-多个对象使用多个对象锁.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    java中synchronized用法

    Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或函数当作锁。每个对象只有一个锁与之相关联。实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 当 ...

    java synchronized 学习

    * 若此对象对应的类中包含了多个 synchronized 修饰的方法或代码块,多个线程访问同一个对象的任意 synchronized 修饰的方法或代码块,只要有一个线程拥有了 synchronized 同步锁,其他线程不管想访问 synchronized ...

Global site tag (gtag.js) - Google Analytics