建立如下的测试类
public class Tobj extends Thread {
public static Object bb=1;
public int v1;
public Tobj(int aa){
v1=aa;
}
public void run(){
testSY(1);
// testSY2();
}
//方法1 普通方法 同时只能有一个对象方法访问testSY
//无法限制不同线程对testSY的访问
public synchronized void testSY(int p1) {
System.out.println("thread:"+p1);
try{
Thread.currentThread().sleep(10000);
}catch(Exception e){}
System.out.println("thread"+v1+",sleep ok");
}
//方法2 使用静态方法,同时只能有一个对象方法或线程访问testSY1
public static synchronized void testSY1(int v1){
System.out.println("static thread:"+v1);
try{
Thread.currentThread().sleep(1000);
}catch(Exception e){}
System.out.println("static thread"+v1+",sleep ok");
}
//方法3 使用类变量
public void testSY2(){
//同时只能有一个对象方法或是单个线程访问该代码段
synchronized (bb){
System.out.println("thread:"+v1);
try{
Thread.currentThread().sleep(1000);
}catch(Exception e){}
System.out.println("thread"+v1+",sleep ok");
}
}
}
测试的代码就不写了,可以根据项目需要选择不同的方法
分享到:
相关推荐
三、`synchronized`的特性与局限 1. **可重入性**:一个线程已经持有对象锁,可以再次请求该锁,不会出现死锁。 2. **非公平性**:线程获取锁没有保证公平性,可能造成线程饥饿问题。 3. **无法中断**:等待锁的线程...
synchronized 的使用方法可以分为两种,一种是使用 synchronized 关键字修饰方法,另一种是使用 synchronized 代码块。例如,在使用 synchronized void addOne() 方法时,可以使用 synchronized 关键字修饰方法,...
synchronized 关键字可以被用于两种范围内:对象实例和类范围。 1. 对象实例范围:synchronized 关键字可以被用于对象实例的方法上,以防止多个线程同时访问同一个对象的 synchronized 方法。例如: ```java public...
本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...
Synchronized 的使用方法有四种: 1. synchronized 修饰普通方法 2. synchronized 修饰普通代码块 3. synchronized 修饰静态方法 4. synchronized 修饰静态方法中的代码块 在使用 synchronized 同步锁时,需要注意...
`synchronized`关键字有两种主要的使用方式:一种是在方法声明中使用,另一种则是在代码块中使用。 ##### 1. synchronized方法 在方法声明中添加`synchronized`关键字,可以将整个方法体变成同步代码块。例如: `...
在Java中,为了保证多线程环境下数据的一致性和安全性,可以采用两种主要的方法:`synchronized`和`volatile`。 ##### 1. synchronized关键字 `synchronized`是一种基于锁的同步机制,它可以应用于方法或者代码块...
通过使用`synchronized`,可以确保同一时刻只有一个线程能够访问被标记为同步的方法或代码块,从而避免多线程环境下的数据不一致问题。 #### 一、基本概念 `synchronized`关键字主要具有以下特性: 1. **互斥性**...
下面,我们将从`synchronized`的基本概念、使用方式以及与`wait`和`notify`方法的关系几个方面进行详细阐述。 ### 一、`synchronized`关键字的基本概念 `synchronized`是Java语言中提供的关键字,用于控制线程的...
通过在方法或代码块上使用`synchronized`,可以确保同一时间只有一个线程能访问这些代码区域,从而有效避免了多线程环境下的数据竞争和不一致性问题。 #### 二、synchronized的作用机制 `synchronized`主要通过对象...
#### 三、Synchronized与ThreadLocal的区别 - **同步机制:** - Synchronized 是通过加锁来实现同步,确保同一时刻只有一个线程能访问被同步的代码块或方法。 - ThreadLocal 并不提供同步机制,而是为每个线程...
`synchronized`有三种主要的使用方式: 1. **修饰实例方法**:当`synchronized`应用于实例方法时,它会对当前实例加锁。这意味着,当一个线程正在执行这个实例的`synchronized`方法时,其他线程试图调用该实例的...
锁的对象取决于方法的作用域:静态方法使用类对象作为锁,实例方法使用当前对象实例作为锁。 - **代码块同步**:使用`synchronized`关键字包围代码块,可以指定锁对象。例如:`synchronized (lockObject) { // code...
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
本文将深入探讨两种主要的锁机制:`synchronized`关键字和`Lock`接口,以及它们各自的特点、应用场景和使用方式。 一、Synchronized `synchronized`是Java中的一个内置关键字,用于提供线程安全。它的主要作用是...
线程A执行`synchronized`方法`m4t1()`,线程B可以同时执行非`synchronized`方法`m4t2()`。 四、`synchronized`的局限性和改进 `synchronized`虽然提供了线程安全,但可能导致线程阻塞,降低系统性能。对于一些复杂...
三、synchronized的可见性与有序性 1. 可见性:synchronized保证了共享变量的修改对于其他线程是可见的,线程在解锁之前对共享变量的修改,其他线程在获取锁后能立即看到这些修改。 2. 有序性:synchronized保证了...
下面将详细介绍`synchronized`关键字的三种使用方式:修饰函数、修饰代码块以及修饰静态方法。 1. **synchronized 修饰函数** 当`synchronized`修饰非静态方法时,它会锁定当前对象实例。这意味着,对于同一个对象...
3. Synchronized的三种应用方式 Java中每一个对象都可以作为锁,这是Synchronized实现同步的基础: * 普通同步方法(实例方法):锁是当前实例对象,进入同步代码前要获得当前实例的锁。 * 静态同步方法:锁是当前...