`
zsnlovewl
  • 浏览: 176515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

synchronized块及方法应用

    博客分类:
  • JAVA
阅读更多
package test;

class Obj implements Runnable {
	public void fun1() {
		synchronized (this) {
			System.out.println(Thread.currentThread().getName() + "取得锁");
			try {
				System.out.println("fun1()执行");
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "解除锁");
		}

	}

	public synchronized void fun2() {
		System.out.println(Thread.currentThread().getName() + "取得锁");
		System.out.println("fun2()执行");
		System.out.println(Thread.currentThread().getName() + "解除锁");
	}

	@Override
	public void run() {
		if (Thread.currentThread().getName().equals("T1")
				|| Thread.currentThread().getName().equals("T3")) {
			fun1();
		} else {
			fun2();
		}
	}

}

public class ThreadSynchronizedTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Obj obj1 = new Obj(), 
			obj2 = new Obj();
		Thread 	T1 = new Thread(obj1), // T1,T2不用线程,相同对象Obj1
				T2 = new Thread(obj1), 
				T3 = new Thread(obj2); // T2,T3不用线程,不同对象Obj1,Obj2
		T1.setName("T1");
		T2.setName("T2");
		T3.setName("T3");
		T1.start();
		T2.start();
		T3.start();
	}

}

 

分享到:
评论

相关推荐

    [JAVA][synchronized的使用]

    `synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`synchronized`代码块或方法时,其他线程对这个对象的`synchronized`代码块或方法的访问将会被阻塞,直到当前线程执行完毕并释放...

    java锁机制Synchronizedjava锁机制Synchronized

    这些房间可以被分为两种:上锁房间(synchronized 方法)和不上锁房间(普通方法)。每个对象都有一个钥匙(key),该钥匙可以打开所有上锁的房间。 Synchronized 方法 当一个线程想要进入一个上锁房间时,它需要...

    java多线程编程之Synchronized块同步方法

    本篇文章将深入探讨`synchronized`块同步方法及其应用,通过实例来阐述其工作原理。 首先,我们来看一个基本的例子。在上述代码中,`Example`类有一个`synchronized`修饰的`excute()`方法。这意味着当一个线程正在...

    synchronized关键字的实质及用法

    本文将详细探讨`synchronized`的关键特性、用法以及它在实际开发中的应用。 1. **synchronized的两种使用方式** - **方法同步**:在方法声明前加上`synchronized`关键字,这将使得整个方法成为同步方法,每次只有...

    Android synchronized 测试案例

    当一个线程进入`synchronized`代码块或方法时,其他试图进入同一块的线程将被阻塞,直到持有锁的线程退出。 二、同步单个对象 1. 同步方法:在方法声明前加上`synchronized`关键字,使得每次只有一个线程能执行该...

    java_synchronized详解

    通过在方法或代码块上使用`synchronized`,可以确保同一时间只有一个线程能访问这些代码区域,从而有效避免了多线程环境下的数据竞争和不一致性问题。 #### 二、synchronized的作用机制 `synchronized`主要通过对象...

    java synchronized详解

    在Java中,同步可以应用于方法或代码块,为线程提供互斥访问,防止数据竞争问题。 1. **什么是`synchronized`?** `synchronized`是Java中的一个关键字,用于实现线程同步,它主要解决多线程环境下共享资源的并发...

    Synchronized关键字的用法

    通过`synchronized`关键字,开发者可以控制代码块或方法的并发访问,从而确保数据的一致性和程序的正确性。 #### 使用场景 1. **同步代码块**:可以通过`synchronized`关键字来声明同步代码块,即通过指定对象锁来...

    volatile和synchronized的区别

    1. **应用范围**:`volatile`只能应用于变量级别,而`synchronized`可以应用于变量、方法甚至是代码块级别。 2. **性能差异**:通常情况下,`volatile`的性能优于`synchronized`。这是因为`synchronized`会导致线程...

    synchronized详解

    当`synchronized`应用于静态方法时,锁对象是类的Class对象。这意味着,无论类的多少实例,只有一个线程可以执行静态同步方法。这是因为静态方法是属于类的,而不是类的实例,所以所有的类实例共享同一把锁。 理解...

    synchronized并发讲解源码.zip

    `synchronized`关键字主要有两种用法:修饰实例方法和同步代码块。当一个方法被`synchronized`修饰时,同一时间只能有一个线程访问该方法,其他试图访问的线程会被阻塞,直到当前线程执行完毕。这种方式保证了同一...

    synchronized关键字的用法详解

    synchronized块 除了在方法级别使用`synchronized`之外,还可以在代码块中使用它。这种方式更加灵活,可以精确地控制哪些代码需要同步执行。其基本语法如下: ```java synchronized (syncObject) { // 需要同步...

    JAVA synchronized详解

    通过使用`synchronized`,可以确保同一时刻只有一个线程能够访问被标记为同步的方法或代码块,从而避免多线程环境下的数据不一致问题。 #### 一、基本概念 `synchronized`关键字主要具有以下特性: 1. **互斥性**...

    Java synchronized详细解读.docx

    首先,`synchronized`可以应用于两种情况:同步方法和同步代码块。同步方法是通过在方法声明前加上`synchronized`关键字,例如`public synchronized void method() {...}`。同步代码块则是通过`synchronized`关键字...

    深入理解java中的synchronized关键字

    本文将深入探讨`synchronized`的两种主要用法:synchronized方法和synchronized块。 1. **synchronized 方法** synchronized方法是通过在方法声明前添加`synchronized`关键字来定义的。例如: ```java public ...

    java同步synchronized关键字用法示例

    synchronized的应用示例** 下面是一个简单的示例,展示了`synchronized`如何防止多个线程同时修改共享计数器: ```java public class Counter { private int count = 0; public synchronized void increment()...

    Java使用synchronized修饰方法来同步线程的实例演示

    本文将深入探讨synchronized修饰方法在Java中的使用及其工作原理,并通过实例演示其应用。 1. **synchronized原理** synchronized基于Java的内置锁(也称为对象锁或 monitors)机制。当一个线程进入synchronized...

    synchronized 的理解

    这意味着在任意时刻,都只有一个线程可以访问该实例的所有`synchronized`方法,或者进入由`synchronized(this)`标记的代码块。对于静态方法,锁对象则是该类的Class对象。 ```java public class MyClass { private...

    synchronized枷锁实例

    方法锁是`synchronized`关键字应用于方法的一种形式,它既可以是类锁(用于静态方法),也可以是对象锁(用于非静态方法)。上面的类锁和对象锁示例中,`method()`就是方法锁的体现。 **非公平锁** 在Java中,`...

    java-synchronized详解.doc

    `synchronized`可以应用于方法或代码块。当它修饰一个方法时,整个方法被视为同步的,只有一个线程可以执行该方法。当修饰一个代码块时,只有获取到指定对象锁的线程才能执行该代码块。 1. 同步方法: ```java ...

Global site tag (gtag.js) - Google Analytics