b、锁定一个对象或方法,它是静态的
这样锁定,它锁定的是对象所属的类
public synchronized static void execute(){
//...
}
等同于
public class TestThread {
public static void execute(){
synchronized(TestThread.class){
//
}
}
}
测试:
目标类:
public class TestThread {
private static Object lock=new Object();
public synchronized static void execute(){ //同步静态方法
for(int i=0;i<100;i++){
System.out.println(i);
}
}
public static void execute1(){
for(int i=0;i<100;i++){
System.out.println(i);
}
}
public void test(){
execute(); //输出是有序的,说明是同步的
//execute1(); //输出是无须的,说明是异步的
}
}
线程类:调用不同的方法,于是建立了两个线程类
public class ThreadA implements Runnable{
public void run() {
TestThread.execute();//调用同步静态方法
}
}
public class ThreadB implements Runnable{
public void run() {
TestThread test=new TestThread();
test.test();//调用非同步非静态方法
}
}
调用:
Runnable runabbleA=new ThreadA();
Thread a=new Thread(runabbleA,"A");
a.start();
Runnable runabbleB=new ThreadB();
Thread b=new Thread(runabbleB,"B");
b.start();
分享到:
相关推荐
一、synchronized 关键字的作用域 synchronized 关键字可以被用于两种范围内:对象实例和类范围。 1. 对象实例范围:synchronized 关键字可以被用于对象实例的方法上,以防止多个线程同时访问同一个对象的 ...
`synchronized`关键字可以修饰方法或用作代码块,其主要作用是控制对共享资源的并发访问,防止数据不一致和竞态条件。当一个线程进入`synchronized`代码块或方法时,其他试图进入同一块的线程将被阻塞,直到持有锁的...
二、`synchronized`的作用 1. **线程互斥**:当一个线程在执行`synchronized`代码时,其他线程必须等待该线程释放锁后才能进入。 2. **内存可见性**:确保线程在读取或修改共享变量时,能看到其他线程对变量的最新...
#### 三、volatile与synchronized的比较 1. **应用范围**:`volatile`只能应用于变量级别,而`synchronized`可以应用于变量、方法甚至是代码块级别。 2. **性能差异**:通常情况下,`volatile`的性能优于`...
#### 三、synchronized的工作原理 `synchronized`关键字的实现依赖于Java虚拟机(JVM)的监视器锁(Monitor Lock)机制。每把锁都有一个拥有者(Owner)和一个计数器。当一个线程请求获取锁时,如果锁的计数器为0,则线程...
#### 二、synchronized的作用机制 `synchronized`主要通过对象锁(也称为监视器锁)来实现其功能。当一个线程进入某个对象的一个`synchronized`代码块时,它会自动获得该对象的锁;离开该代码块时,则自动释放锁。...
Synchronized 同步锁的作用是解决多线程访问实例变量时可能造成的数据脏读现象。Synchronized 的使用方法有四种: 1. synchronized 修饰普通方法 2. synchronized 修饰普通代码块 3. synchronized 修饰静态方法 4. ...
### 三、`wait`和`notify`方法的作用 在Java中,`wait()`和`notify()`是`Object`类的方法,用于实现线程间的通信。它们必须在`synchronized`代码块或方法中调用,因为它们依赖于对象的内置锁。 #### 1. `wait()` ...
#### 三、Synchronized与ThreadLocal的区别 - **同步机制:** - Synchronized 是通过加锁来实现同步,确保同一时刻只有一个线程能访问被同步的代码块或方法。 - ThreadLocal 并不提供同步机制,而是为每个线程...
1. **基本概念**:`synchronized`关键字可以作用于方法或代码块,用来声明同步区域。当一个线程进入同步区域时,会自动获得锁;离开时自动释放锁。 - **方法级同步**:直接在方法声明前使用`synchronized`,整个...
本篇文章将深入探讨`synchronized`的使用及其在Java并发编程中的作用。 首先,`synchronized`关键字的主要功能是实现线程同步,确保同一时间只有一个线程可以执行特定的代码段。这在处理共享数据时尤为重要,因为它...
三、synchronized的两种使用形式 1. 同步方法: ```java public synchronized void methodName() { // 代码块 } ``` 2. 同步代码块: ```java synchronized (object) { // 代码块 } ``` 这里的`object`可以是任何...
synchronized 有三种用法:同步实例方法、同步类方法和同步代码块。每个同步对象都有一个自己的 Monitor,与之关联,当且一个 Monitor 被持有后,它将处于锁定状态。 synchronized 的实现原理是基于进入和退出 ...
首先,我们要理解synchronized的作用。它主要用于解决并发环境下的线程安全问题,当一个线程正在执行某个synchronized代码块时,其他线程必须等待当前线程完成后再进行访问,从而避免了数据的不一致性。这种机制在...
同步相量测量技术(Synchronized Phasor Measurements,简称SPM)是电力系统监测、分析与控制领域的一项关键技术。该技术通过高精度的时间同步机制(如全球定位系统GPS)实现了电网中各点电压和电流相量的精确测量,...
同步多媒体集成语言(Synchronized Multimedia Integration Language,简称SMIL,发音为“smile”),是一种基于XML的语言标准,用于创建交互式的多媒体演示。SMIL 3.0是该标准的第三个版本,它在前两个版本的基础上...
三、Synchronized的作用 1. 确保线程互斥:Synchronized保证同一时间只有一个线程可以执行同步代码,防止数据竞争和不一致。 2. 保证共享变量的可见性:当一个线程修改了同步代码块中的共享变量,其他线程在获取锁后...
synchronized关键字有三种主要的应用方式: 1. 修饰实例方法:当synchronized应用于实例方法时,它会锁定当前实例对象,只有拥有该实例的对象才能访问该方法。这可以防止其他线程同时执行相同实例的同步方法,保证...