`

synchronized 关键字及使用

    博客分类:
  • java
 
阅读更多

synchronized 锁重入

关键字synchronized锁重入的功能,也就是在使用synchronized 时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁  示例代码如下

public class SyncDubbo1 {

	public synchronized void method1(){
		System.out.println("method1");
		method2();
	}
	
	public synchronized void method2(){
		System.out.println("method2");
		method3();
	}
	
	public synchronized void method3(){
		System.out.println("method3");
	}
	
	public static void main(String[] args) {
		final SyncDubbo1 sDubbo1 = new SyncDubbo1();
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				sDubbo1.method1();
			}
		});
		t1.start();
	}
}

 父子类继承关系时 

public class SyncDubbo2 {

	
	static class Main{
		public int i = 10;
		public synchronized void operatorSup(){
			try {
				i--;
				System.out.println("Main print i = "+i);
				Thread.sleep(1000);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	static class Sub extends Main{
		public synchronized void operatorSub(){
			try {
				while (i>0) {
					i--;
					System.out.println("Sub print i = "+i);
					Thread.sleep(100);
					this.operatorSup();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public static void main(String[] args) {
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				Sub sub = new Sub();
				sub.operatorSub();
			}
		});
		t1.start();
	}
}

 对象锁 使用示例

public class ObjectLock {

	public void method1(){
		synchronized (this) {	//对象锁
			try {
				System.out.println("do method1..");
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void method2(){		//类锁
		synchronized (ObjectLock.class) {
			try {
				System.out.println("do method2..");
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	private Object lock = new Object();
	public void method3(){		//任何对象锁
		synchronized (lock) {
			try {
				System.out.println("do method3..");
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		
		final ObjectLock objLock = new ObjectLock();
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				objLock.method1();
			}
		});
		Thread t2 = new Thread(new Runnable() {
			@Override
			public void run() {
				objLock.method2();
			}
		});
		Thread t3 = new Thread(new Runnable() {
			@Override
			public void run() {
				objLock.method3();
			}
		});
		
		t1.start();
		t2.start();
		t3.start();
	}
	
}

 

 尽量避免使用 字符串对象 做为锁对象 

分享到:
评论

相关推荐

    java同步synchronized关键字用法示例

    - **代码块同步:** 也可以使用`synchronized`关键字来同步代码块,这样可以更细粒度地控制同步范围,提高程序性能。 ```java public void method() { synchronized (object) { // 代码块 } } ``` 这里的`object...

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

    2. 使用 synchronized 关键字时,需要明确对象的锁是谁的。 3. synchronized 块可以作为一种解决方法,来解决 synchronized 方法的缺陷。 synchronized 关键字是 Java 语言中解决线程同步机制的重要机制。它可以...

    synchronized关键字的用法详解

    ### synchronized关键字的深入解析 #### 一、synchronized关键字的重要性 `synchronized`关键字在Java语言中扮演着极其重要的角色,它是实现线程安全的核心手段之一。通过`synchronized`关键字,开发人员可以在多...

    java多线程中synchronized关键字的用法

    java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com

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

    但是,很多开发者对 synchronized 关键字的理解并不够深入,本文将通过实例解析 Java 中的 synchronized 关键字与线程平安问题,帮助开发者更好地理解和使用 synchronized 关键字。 首先,需要清晰的是 ...

    深入理解Java中的synchronized关键字:同步机制与应用

    本文将深入探讨synchronized关键字的工作原理、使用方式以及在实际编程中的应用。 synchronized关键字是Java中实现线程同步的重要工具。通过本文的探讨,我们了解到了synchronized的工作原理、基本用法、以及在实际...

    synchronized关键字的实质及用法

    《深入理解Java中的synchronized关键字》 在Java编程语言中,`synchronized`关键字是用于实现线程同步的重要工具,它的本质在于确保多线程环境下的数据一致性与安全性。通过`synchronized`,我们可以控制对共享资源...

    Java并发编程:Synchronized关键字深度解析

    本文深入探讨了Java中用于解决并发...通过对synchronized关键字的深入分析,本文为Java开发者提供了对并发编程中关键同步工具的全面理解,特别是在高并发场景下如何有效使用synchronized以确保线程安全和提高程序性能。

    Java 多线程与并发(4-26)-关键字- synchronized详解.pdf

    Java 多线程与并发中的 synchronized 关键字是实现同步块的互斥访问和线程的阻塞及唤醒等工作的重要工具。下面将对 synchronized 关键字进行详细分析。 synchronized 关键字的使用场景 synchronized 关键字可以...

    Synchronized关键字的用法

    ### Synchronized关键字在Java中的应用 #### 概述 `synchronized`是Java语言中的一个关键字,主要用于实现线程同步,防止多个线程同时访问共享资源而导致的数据不一致问题。通过`synchronized`关键字,开发者可以...

    【Java并发编程】Synchronized关键字实现原理.doc

    Java 并发编程 Synchronized 关键字实现原理 Synchronized 关键字是 Java 并发编程中最基本的同步机制,它可以保证线程安全,包括原子性、可见性和有序性。Synchronized 关键字可以修饰方法或代码块,使得在同一...

    java基本教程之synchronized关键字java多

    一、synchronized关键字的作用与原理 `synchronized`关键字主要有两个作用:同步方法和同步块。它通过锁机制来实现线程同步,防止多个线程同时执行同一段代码,可能导致的数据不一致问题。 1. 同步方法:当在方法...

    Java synchronized关键字使用方式及特性解析

    Javaynchronized关键字使用方式及特性解析 Java中的synchronized关键字是一种实现锁的方式,它是在JVM层面实现的非公平锁。synchronized关键字可以用于实现线程同步,以下是使用synchronized的四种方式: 1. 作用...

    java实现单例模式-懒汉模式(线程安全,使用synchronized关键字)

    线程安全,使用synchronized关键字

    Lock接口与synchronized关键字

    ### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面...

    java里面synchronized用法.doc

    Java 中的 synchronized 用法详解 Java 中的 synchronized 关键字是用于解决多线程并发问题的重要工具之一。...正确地使用 synchronized 关键字可以帮助开发者们编写更加高效、可靠的多线程程序。

    深入理解java中的synchronized关键字

    以下是一个简单的例子,展示了`synchronized`关键字的使用: ```java public class TextThread { int num = 0; public synchronized void increment() { num++; } public static void main(String[] args...

    5-4JVM内置锁synchronized关键字详解.mp4

    5-4JVM内置锁synchronized关键字详解.mp4

    Java并发-Synchronized关键字.docx

    本文将探讨Synchronized关键字在解决并发控制中的作用及其使用方式。 首先,让我们回顾一下问题的背景:在给出的示例代码中,创建了10个线程,每个线程都对共享变量`count`进行10000000次的累加操作。理论上,最终...

Global site tag (gtag.js) - Google Analytics